{"mappings":"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","sources":["packages/@adobe/react-spectrum/src/tabs/Tabs.tsx"],"sourcesContent":["/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {AriaLabelingProps, CollectionChildren, DOMProps, DOMRef, DOMRefValue, Key, Node, Orientation, RefObject, SingleSelection, StyleProps} from '@react-types/shared';\nimport {AriaTabPanelProps, useTab, useTabList, useTabPanel} from 'react-aria/useTabList';\nimport {classNames} from '../utils/classNames';\nimport {filterDOMProps} from 'react-aria/filterDOMProps';\nimport {FocusRing} from 'react-aria/FocusRing';\nimport {Item} from 'react-stately/Item';\nimport {ListCollection} from 'react-stately/private/list/ListCollection';\nimport {mergeProps} from 'react-aria/mergeProps';\nimport {Picker, SpectrumPickerProps} from '../picker/Picker';\nimport React, {\n  CSSProperties,\n  HTMLAttributes,\n  ReactElement,\n  ReactNode,\n  useCallback,\n  useContext,\n  useEffect,\n  useRef,\n  useState\n} from 'react';\nimport {SlotProvider} from '../utils/Slots';\nimport styles from '@adobe/spectrum-css-temp/components/tabs/vars.css';\nimport {TabListState, useTabListState} from 'react-stately/useTabListState';\nimport {Text} from '../text/Text';\nimport {unwrapDOMRef, useDOMRef} from '../utils/useDOMRef';\nimport {useCollection} from 'react-stately/private/collections/useCollection';\nimport {useHover} from 'react-aria/useHover';\nimport {useId} from 'react-aria/useId';\nimport {useLayoutEffect} from 'react-aria/private/utils/useLayoutEffect';\nimport {useLocale} from 'react-aria/I18nProvider';\nimport {useProvider, useProviderProps} from '../provider/Provider';\nimport {useResizeObserver} from 'react-aria/private/utils/useResizeObserver';\nimport {useStyleProps} from '../utils/styleProps';\n\nexport interface SpectrumTabsProps<T> extends Omit<SingleSelection, 'onSelectionChange' | 'disallowEmptySelection' | 'selectedKey' | 'defaultSelectedKey' | 'onSelectionChange'>, AriaLabelingProps, DOMProps, StyleProps {\n  /** The children of the `<Tabs>` element. Should include `<TabList>` and `<TabPanels>` elements. */\n  children: ReactNode,\n  /** The item objects for each tab, for dynamic collections. */\n  items?: Iterable<T>,\n  /** The keys of the tabs that are disabled. These tabs cannot be selected, focused, or otherwise interacted with. */\n  disabledKeys?: Iterable<Key>,\n  /** Whether the Tabs are disabled. */\n  isDisabled?: boolean,\n  /** Whether the tabs are displayed in a quiet style. */\n  isQuiet?: boolean,\n  /** Whether the tabs are displayed in an emphasized style. */\n  isEmphasized?: boolean,\n  /** The amount of space between the tabs. */\n  density?: 'compact' | 'regular',\n  /** The currently selected key in the collection (controlled). */\n  selectedKey?: Key,\n  /** The initial selected keys in the collection (uncontrolled). */\n  defaultSelectedKey?: Key,\n  /** Handler that is called when the selection changes. */\n  onSelectionChange?: (key: Key) => void,\n  /**\n   * Whether tabs are activated automatically on focus or manually.\n   * @default 'automatic'\n   */\n  keyboardActivation?: 'automatic' | 'manual',\n  /**\n   * The orientation of the tabs.\n   * @default 'horizontal'\n   */\n  orientation?: Orientation\n}\n\ninterface TabsContext<T> {\n  tabProps: SpectrumTabsProps<T>,\n  tabState: {\n    tabListState: TabListState<T> | null,\n    setTabListState: (state: TabListState<T>) => void,\n    selectedTab: HTMLElement | null,\n    collapsed: boolean\n  },\n  refs: {\n    wrapperRef: RefObject<HTMLDivElement | null>,\n    tablistRef: RefObject<HTMLDivElement | null>\n  },\n  tabPanelProps: HTMLAttributes<HTMLElement>,\n  tabLineState: Array<DOMRect>\n}\n\nconst TabContext = React.createContext<TabsContext<any> | null>(null);\n\n/**\n * Tabs organize content into multiple sections and allow users to navigate between them. The content under the set of tabs should be related and form a coherent unit.\n */\n// forwardRef doesn't support generic parameters, so cast the result to the correct type\n// https://stackoverflow.com/questions/58469229/react-with-typescript-generics-while-using-react-forwardref\nexport const Tabs = React.forwardRef(function Tabs<T extends object>(props: SpectrumTabsProps<T>, ref: DOMRef<HTMLDivElement>) {\n  props = useProviderProps(props);\n  let {\n    orientation = 'horizontal' as Orientation,\n    density = 'regular',\n    children,\n    ...otherProps\n  } = props;\n\n  let domRef = useDOMRef(ref);\n  let tablistRef = useRef<HTMLDivElement>(null);\n  let wrapperRef = useRef<HTMLDivElement>(null);\n\n  let {direction} = useLocale();\n  let {styleProps} = useStyleProps(otherProps);\n  let [collapsed, setCollapsed] = useState(false);\n  let [selectedTab, setSelectedTab] = useState<HTMLElement | null>(null);\n  const [tabListState, setTabListState] = useState<TabListState<T> | null>(null);\n  let [tabPositions, setTabPositions] = useState<DOMRect[]>([]);\n  let prevTabPositions = useRef<DOMRect[]>(tabPositions);\n\n  useEffect(() => {\n    if (tablistRef.current) {\n      let selectedTab: HTMLElement | null = tablistRef.current.querySelector(`[data-key=\"${CSS.escape(tabListState?.selectedKey?.toString() ?? '')}\"]`);\n\n      if (selectedTab != null) {\n        setSelectedTab(selectedTab);\n      }\n    }\n    // collapse is in the dep array so selectedTab can be updated for TabLine positioning\n  }, [children, tabListState?.selectedKey, collapsed, tablistRef]);\n\n  let checkShouldCollapse = useCallback(() => {\n    if (wrapperRef.current && orientation !== 'vertical') {\n      let tabsComponent = wrapperRef.current;\n      let tabs: NodeListOf<Element> = tablistRef.current?.querySelectorAll('[role=\"tab\"]') ?? new NodeList() as NodeListOf<Element>;\n      let tabDimensions = [...tabs].map((tab: Element) => tab.getBoundingClientRect());\n\n      let end = direction === 'rtl' ? 'left' : 'right';\n      let farEdgeTabList = tabsComponent.getBoundingClientRect()[end];\n      let farEdgeLastTab = tabDimensions[tabDimensions.length - 1][end];\n      let shouldCollapse = direction === 'rtl' ? farEdgeLastTab < farEdgeTabList : farEdgeTabList < farEdgeLastTab;\n      setCollapsed(shouldCollapse);\n      if (tabDimensions.length !== prevTabPositions.current.length\n        || tabDimensions.some((box, index) => box?.left !== prevTabPositions.current[index]?.left || box?.right !== prevTabPositions.current[index]?.right)) {\n        setTabPositions(tabDimensions);\n        prevTabPositions.current = tabDimensions;\n      }\n    }\n  }, [tablistRef, wrapperRef, direction, orientation, setCollapsed, prevTabPositions, setTabPositions]);\n\n  useLayoutEffect(() => {\n    checkShouldCollapse();\n  }, [children, checkShouldCollapse]);\n\n  useResizeObserver({ref: wrapperRef, onResize: checkShouldCollapse});\n\n  let tabPanelProps: HTMLAttributes<HTMLElement> = {\n    'aria-labelledby': undefined\n  };\n\n  // When the tabs are collapsed, the tabPanel should be labelled by the Picker button element.\n  let collapsibleTabListId = useId();\n  if (collapsed && orientation !== 'vertical') {\n    tabPanelProps['aria-labelledby'] = collapsibleTabListId;\n  }\n  return (\n    <TabContext.Provider\n      value={{\n        tabProps: {...props, orientation, density},\n        tabState: {tabListState, setTabListState, selectedTab, collapsed},\n        refs: {tablistRef, wrapperRef},\n        tabPanelProps,\n        tabLineState: tabPositions\n      }}>\n      <div\n        {...filterDOMProps(otherProps)}\n        {...styleProps}\n        ref={domRef}\n        className={classNames(\n          styles,\n          'spectrum-TabsPanel',\n          `spectrum-TabsPanel--${orientation}`,\n          styleProps.className\n        )}>\n        {props.children}\n      </div>\n    </TabContext.Provider>\n  );\n}) as <T>(props: SpectrumTabsProps<T> & {ref?: DOMRef<HTMLDivElement>}) => ReactElement;\n\ninterface TabProps<T> extends DOMProps {\n  item: Node<T>,\n  state: TabListState<T>,\n  isDisabled?: boolean,\n  orientation?: Orientation\n}\n\n// @private\nfunction Tab<T>(props: TabProps<T>) {\n  let {item, state} = props;\n  let {key, rendered} = item;\n\n  let ref = useRef<any>(undefined);\n  let {tabProps, isSelected, isDisabled} = useTab({key}, state, ref);\n\n  let {hoverProps, isHovered} = useHover({\n    ...props\n  });\n  let ElementType: React.ElementType = item.props.href ? 'a' : 'div';\n\n  return (\n    <FocusRing focusRingClass={classNames(styles, 'focus-ring')}>\n      <ElementType\n        {...mergeProps(tabProps, hoverProps)}\n        ref={ref}\n        className={classNames(\n          styles,\n          'spectrum-Tabs-item',\n          {\n            'is-selected': isSelected,\n            'is-disabled': isDisabled,\n            'is-hovered': isHovered\n          }\n        )}>\n        <SlotProvider\n          slots={{\n            icon: {\n              size: 'S',\n              UNSAFE_className: classNames(styles, 'spectrum-Icon')\n            },\n            text: {\n              UNSAFE_className: classNames(styles, 'spectrum-Tabs-itemLabel')\n            }\n          }}>\n          {typeof rendered === 'string'\n            ? <Text>{rendered}</Text>\n            : rendered}\n        </SlotProvider>\n      </ElementType>\n    </FocusRing>\n  );\n}\n\ninterface TabLineProps {\n  orientation?: Orientation,\n  selectedTab?: HTMLElement | null,\n  selectedKey?: Key | null\n}\n\n// @private\nfunction TabLine(props: TabLineProps) {\n  let {\n    orientation,\n    // Is either the tab node (non-collapsed) or the picker node (collapsed)\n    selectedTab,\n    // selectedKey is provided so that the TabLine styles are updated when the TabPicker's width updates from a selection change\n    selectedKey\n  } = props;\n\n  let {direction} = useLocale();\n  let {scale} = useProvider();\n  let {tabLineState} = useContext(TabContext)!;\n\n  let [style, setStyle] = useState<CSSProperties>({\n    width: undefined,\n    height: undefined\n  });\n\n  let onResize = useCallback(() => {\n    if (selectedTab) {\n      let styleObj: CSSProperties = {transform: undefined, width: undefined, height: undefined};\n      // In RTL, calculate the transform from the right edge of the tablist so that resizing the window doesn't break the Tabline position due to offsetLeft changes\n      let offset = direction === 'rtl' ?\n        -1 * ((selectedTab.offsetParent as HTMLElement)?.offsetWidth - selectedTab.offsetWidth - selectedTab.offsetLeft) :\n        selectedTab.offsetLeft;\n      styleObj.transform = orientation === 'vertical'\n        ? `translateY(${selectedTab.offsetTop}px)`\n        : `translateX(${offset}px)`;\n\n      if (orientation === 'horizontal') {\n        styleObj.width = `${selectedTab.offsetWidth}px`;\n      } else {\n        styleObj.height = `${selectedTab.offsetHeight}px`;\n      }\n      setStyle(styleObj);\n    }\n  }, [direction, setStyle, selectedTab, orientation]);\n\n  useLayoutEffect(() => {\n    onResize();\n  }, [onResize, scale, selectedKey, tabLineState]);\n\n  return <div className={classNames(styles, 'spectrum-Tabs-selectionIndicator')} role=\"presentation\" style={style} />;\n}\n\nexport interface SpectrumTabListProps<T> extends DOMProps, StyleProps {\n  /** The tab items to display. Item keys should match the key of the corresponding `<Item>` within the `<TabPanels>` element. */\n  children: CollectionChildren<T>\n}\n\n/**\n * A TabList is used within Tabs to group tabs that a user can switch between.\n * The keys of the items within the <TabList> must match up with a corresponding item inside the <TabPanels>.\n */\nexport function TabList<T>(props: SpectrumTabListProps<T>): ReactElement {\n  const tabContext = useContext(TabContext)!;\n  const {refs, tabState, tabProps, tabPanelProps} = tabContext;\n  const {isQuiet, density, isEmphasized, orientation} = tabProps;\n  const {selectedTab, collapsed, setTabListState} = tabState;\n  const {tablistRef, wrapperRef} = refs;\n  // Pass original Tab props but override children to create the collection.\n  const state = useTabListState({...tabProps, children: props.children});\n\n  let {styleProps} = useStyleProps(props);\n  const {tabListProps} = useTabList({...tabProps, ...props}, state, tablistRef);\n\n  useEffect(() => {\n    // Passing back to root as useTabPanel needs the TabListState\n    setTabListState(state);\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [state.disabledKeys, state.selectedItem, state.selectedKey, props.children]);\n\n  let collapseStyle : React.CSSProperties = collapsed && orientation !== 'vertical' ? {maxWidth: 'calc(100% + 1px)', overflow: 'hidden', visibility: 'hidden', position: 'absolute'} : {maxWidth: 'calc(100% + 1px)'};\n  let stylePropsFinal = orientation === 'vertical' ? styleProps : {style: collapseStyle};\n\n  if (collapsed && orientation !== 'vertical') {\n    tabListProps['aria-hidden'] = true;\n  }\n\n  let tabListclassName = classNames(styles, 'spectrum-TabsPanel-tabs');\n\n  const tabContent = (\n    <div\n      {...stylePropsFinal}\n      {...tabListProps}\n      ref={tablistRef}\n      className={classNames(\n        styles,\n        'spectrum-Tabs',\n        `spectrum-Tabs--${orientation}`,\n        tabListclassName,\n        {\n          'spectrum-Tabs--quiet': isQuiet,\n          'spectrum-Tabs--emphasized': isEmphasized,\n          ['spectrum-Tabs--compact']: density === 'compact'\n        },\n        orientation === 'vertical' && styleProps.className\n      )\n      }>\n      {[...state.collection].map((item) => (\n        <Tab key={item.key} item={item} state={state} orientation={orientation} />\n      ))}\n      <TabLine orientation={orientation} selectedTab={selectedTab} />\n    </div>\n  );\n\n\n  if (orientation === 'vertical') {\n    return tabContent;\n  } else {\n    return (\n      <div\n        {...styleProps}\n        ref={wrapperRef}\n        className={classNames(\n          styles,\n          'spectrum-TabsPanel-collapseWrapper',\n          styleProps.className\n        )}>\n        <TabPicker {...props} {...tabProps} visible={collapsed} id={tabPanelProps['aria-labelledby']} state={state} className={tabListclassName} />\n        {tabContent}\n      </div>\n    );\n  }\n}\n\nexport interface SpectrumTabPanelsProps<T> extends DOMProps, StyleProps {\n  /** The contents of each tab. Item keys should match the key of the corresponding `<Item>` within the `<TabList>` element. */\n  children: CollectionChildren<T>\n}\n\n/**\n * TabPanels is used within Tabs as a container for the content of each tab.\n * The keys of the items within the <TabPanels> must match up with a corresponding item inside the <TabList>.\n */\nexport function TabPanels<T extends object>(props: SpectrumTabPanelsProps<T>): ReactElement {\n  const {tabState, tabProps} = useContext(TabContext)!;\n  const {tabListState} = tabState;\n\n  const factory = useCallback((nodes: Iterable<Node<T>>) => new ListCollection(nodes), []);\n  const collection = useCollection({items: tabProps.items, ...props}, factory, {suppressTextValueWarning: true});\n  const selectedItem = tabListState && tabListState.selectedKey != null ? collection.getItem(tabListState.selectedKey) : null;\n\n  return (\n    <TabPanel {...props} key={tabListState?.selectedKey}>\n      {selectedItem && selectedItem.props.children}\n    </TabPanel>\n  );\n}\n\ninterface TabPanelProps extends AriaTabPanelProps, StyleProps {\n  children?: ReactNode\n}\n\n// @private\nfunction TabPanel(props: TabPanelProps) {\n  const {tabState, tabPanelProps: ctxTabPanelProps} = useContext(TabContext)!;\n  const {tabListState} = tabState;\n  let ref = useRef<HTMLDivElement | null>(null);\n  const {tabPanelProps} = useTabPanel(props, tabListState, ref);\n  let {styleProps} = useStyleProps(props);\n\n  if (ctxTabPanelProps['aria-labelledby']) {\n    tabPanelProps['aria-labelledby'] = ctxTabPanelProps['aria-labelledby'];\n  }\n\n  return (\n    <FocusRing focusRingClass={classNames(styles, 'focus-ring')}>\n      <div {...styleProps} {...tabPanelProps} ref={ref} className={classNames(styles, 'spectrum-TabsPanel-tabpanel', styleProps.className)}>\n        {props.children}\n      </div>\n    </FocusRing>\n  );\n}\n\ninterface TabPickerProps<T> extends Omit<SpectrumPickerProps<T>, 'children' | 'onSelectionChange'> {\n  density?: 'compact' | 'regular',\n  isEmphasized?: boolean,\n  state: TabListState<T>,\n  className?: string,\n  visible: boolean,\n  onSelectionChange?: (key: Key) => void\n}\n\nfunction TabPicker<T>(props: TabPickerProps<T>) {\n  let {\n    isDisabled,\n    isEmphasized,\n    isQuiet,\n    state,\n    'aria-labelledby': ariaLabeledBy,\n    'aria-label': ariaLabel,\n    density,\n    className,\n    id,\n    visible\n  } = props;\n\n  let ref = useRef<DOMRefValue<HTMLDivElement>>(null);\n  let [pickerNode, setPickerNode] = useState<HTMLElement | null>(null);\n\n  useEffect(() => {\n    let node = unwrapDOMRef(ref);\n    setPickerNode(node.current);\n  }, [ref]);\n\n  let items = [...state.collection];\n  let pickerProps = {\n    'aria-labelledby': ariaLabeledBy,\n    'aria-label': ariaLabel\n  };\n\n  const style : React.CSSProperties = visible ? {} : {visibility: 'hidden', position: 'absolute'};\n\n  return (\n    <div\n      className={classNames(\n        styles,\n        'spectrum-Tabs',\n        'spectrum-Tabs--horizontal',\n        'spectrum-Tabs--isCollapsed',\n        {\n          'spectrum-Tabs--quiet': isQuiet,\n          ['spectrum-Tabs--compact']: density === 'compact',\n          'spectrum-Tabs--emphasized': isEmphasized\n        },\n        className\n      )}\n      style={style}\n      aria-hidden={visible ? undefined : true}>\n      <SlotProvider\n        slots={{\n          icon: {\n            size: 'S',\n            UNSAFE_className: classNames(styles, 'spectrum-Icon')\n          },\n          button: {\n            focusRingClass: classNames(styles, 'focus-ring')\n          }\n        }}>\n        <Picker\n          {...pickerProps}\n          id={id}\n          items={items}\n          ref={ref}\n          isQuiet\n          isDisabled={!visible || isDisabled}\n          selectedKey={state.selectedKey}\n          disabledKeys={state.disabledKeys}\n          onSelectionChange={key => {\n            if (key != null) {\n              state.setSelectedKey(key);\n            }\n          }}\n          UNSAFE_className={classNames(styles, 'spectrum-Tabs-picker')}>\n          {item => <Item {...item.props}>{item.rendered}</Item>}\n        </Picker>\n        {pickerNode && <TabLine orientation=\"horizontal\" selectedTab={pickerNode} selectedKey={state.selectedKey} />}\n      </SlotProvider>\n    </div>\n  );\n}\n"],"names":[],"version":3,"file":"Tabs.cjs.map"}