UNPKG

27.6 kBSource Map (JSON)View Raw
1{"version":3,"file":"react-tabs.production.min.js","sources":["../src/helpers/elementTypes.js","../src/helpers/childrenDeepMap.js","../src/helpers/uuid.js","../src/helpers/count.js","../src/components/UncontrolledTabs.js","../node_modules/classnames/index.js","../src/components/Tabs.js","../src/components/TabList.js","../src/components/Tab.js","../src/components/TabPanel.js"],"sourcesContent":["export function isTab(el) {\n return el.type && el.type.tabsRole === 'Tab';\n}\n\nexport function isTabPanel(el) {\n return el.type && el.type.tabsRole === 'TabPanel';\n}\n\nexport function isTabList(el) {\n return el.type && el.type.tabsRole === 'TabList';\n}\n","import { Children, cloneElement } from 'react';\nimport { isTabPanel, isTab, isTabList } from '../helpers/elementTypes';\n\nfunction isTabChild(child) {\n return isTab(child) || isTabList(child) || isTabPanel(child);\n}\n\nexport function deepMap(children, callback) {\n return Children.map(children, child => {\n // null happens when conditionally rendering TabPanel/Tab\n // see https://github.com/reactjs/react-tabs/issues/37\n if (child === null) return null;\n\n if (isTabChild(child)) {\n return callback(child);\n }\n\n if (child.props && child.props.children && typeof child.props.children === 'object') {\n // Clone the child that has children and map them too\n return cloneElement(child, {\n ...child.props,\n children: deepMap(child.props.children, callback),\n });\n }\n\n return child;\n });\n}\n\nexport function deepForEach(children, callback) {\n return Children.forEach(children, child => {\n // null happens when conditionally rendering TabPanel/Tab\n // see https://github.com/reactjs/react-tabs/issues/37\n if (child === null) return;\n\n if (isTab(child) || isTabPanel(child)) {\n callback(child);\n } else if (child.props && child.props.children && typeof child.props.children === 'object') {\n if (isTabList(child)) callback(child);\n deepForEach(child.props.children, callback);\n }\n });\n}\n","// Get a universally unique identifier\nlet count = 0;\nexport default function uuid() {\n return `react-tabs-${count++}`;\n}\n\nexport function reset() {\n count = 0;\n}\n","import { deepForEach } from '../helpers/childrenDeepMap';\nimport { isTab, isTabPanel } from './elementTypes';\n\nexport function getTabsCount(children) {\n let tabCount = 0;\n deepForEach(children, child => {\n if (isTab(child)) tabCount++;\n });\n\n return tabCount;\n}\n\nexport function getPanelsCount(children) {\n let panelCount = 0;\n deepForEach(children, child => {\n if (isTabPanel(child)) panelCount++;\n });\n\n return panelCount;\n}\n","import PropTypes from 'prop-types';\nimport React, { cloneElement, Component } from 'react';\nimport cx from 'classnames';\nimport uuid from '../helpers/uuid';\nimport { childrenPropType } from '../helpers/propTypes';\nimport { getPanelsCount, getTabsCount } from '../helpers/count';\nimport { deepMap } from '../helpers/childrenDeepMap';\nimport { isTabList, isTabPanel, isTab } from '../helpers/elementTypes';\n\n// Determine if a node from event.target is a Tab element\nfunction isTabNode(node) {\n return 'getAttribute' in node && node.getAttribute('role') === 'tab';\n}\n\n// Determine if a tab node is disabled\nfunction isTabDisabled(node) {\n return node.getAttribute('aria-disabled') === 'true';\n}\n\nlet canUseActiveElement;\ntry {\n canUseActiveElement = !!(\n typeof window !== 'undefined' &&\n window.document &&\n window.document.activeElement\n );\n} catch (e) {\n // Work around for IE bug when accessing document.activeElement in an iframe\n // Refer to the following resources:\n // http://stackoverflow.com/a/10982960/369687\n // https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/12733599\n canUseActiveElement = false;\n}\nexport default class UncontrolledTabs extends Component {\n static defaultProps = {\n className: 'react-tabs',\n focus: false,\n };\n\n static propTypes = {\n children: childrenPropType,\n className: PropTypes.oneOfType([PropTypes.string, PropTypes.array, PropTypes.object]),\n disabledTabClassName: PropTypes.string,\n domRef: PropTypes.func,\n focus: PropTypes.bool,\n forceRenderTabPanel: PropTypes.bool,\n onSelect: PropTypes.func.isRequired,\n selectedIndex: PropTypes.number.isRequired,\n selectedTabClassName: PropTypes.string,\n selectedTabPanelClassName: PropTypes.string,\n };\n\n tabNodes = [];\n\n setSelected(index, event) {\n // Check index boundary\n if (index < 0 || index >= this.getTabsCount()) return;\n\n // Call change event handler\n this.props.onSelect(index, this.props.selectedIndex, event);\n }\n\n getNextTab(index) {\n const count = this.getTabsCount();\n\n // Look for non-disabled tab from index to the last tab on the right\n for (let i = index + 1; i < count; i++) {\n if (!isTabDisabled(this.getTab(i))) {\n return i;\n }\n }\n\n // If no tab found, continue searching from first on left to index\n for (let i = 0; i < index; i++) {\n if (!isTabDisabled(this.getTab(i))) {\n return i;\n }\n }\n\n // No tabs are disabled, return index\n return index;\n }\n\n getPrevTab(index) {\n let i = index;\n\n // Look for non-disabled tab from index to first tab on the left\n while (i--) {\n if (!isTabDisabled(this.getTab(i))) {\n return i;\n }\n }\n\n // If no tab found, continue searching from last tab on right to index\n i = this.getTabsCount();\n while (i-- > index) {\n if (!isTabDisabled(this.getTab(i))) {\n return i;\n }\n }\n\n // No tabs are disabled, return index\n return index;\n }\n\n getTabsCount() {\n return getTabsCount(this.props.children);\n }\n\n getPanelsCount() {\n return getPanelsCount(this.props.children);\n }\n\n getTab(index) {\n return this.tabNodes[`tabs-${index}`];\n }\n\n getChildren() {\n let index = 0;\n const {\n children,\n disabledTabClassName,\n focus,\n forceRenderTabPanel,\n selectedIndex,\n selectedTabClassName,\n selectedTabPanelClassName,\n } = this.props;\n\n this.tabIds = this.tabIds || [];\n this.panelIds = this.panelIds || [];\n let diff = this.tabIds.length - this.getTabsCount();\n\n // Add ids if new tabs have been added\n // Don't bother removing ids, just keep them in case they are added again\n // This is more efficient, and keeps the uuid counter under control\n while (diff++ < 0) {\n this.tabIds.push(uuid());\n this.panelIds.push(uuid());\n }\n\n // Map children to dynamically setup refs\n return deepMap(children, child => {\n let result = child;\n\n // Clone TabList and Tab components to have refs\n if (isTabList(child)) {\n let listIndex = 0;\n\n // Figure out if the current focus in the DOM is set on a Tab\n // If it is we should keep the focus on the next selected tab\n let wasTabFocused = false;\n\n if (canUseActiveElement) {\n wasTabFocused = React.Children.toArray(child.props.children)\n .filter(isTab)\n .some((tab, i) => document.activeElement === this.getTab(i));\n }\n\n result = cloneElement(child, {\n children: deepMap(child.props.children, tab => {\n const key = `tabs-${listIndex}`;\n const selected = selectedIndex === listIndex;\n\n const props = {\n tabRef: node => {\n this.tabNodes[key] = node;\n },\n id: this.tabIds[listIndex],\n panelId: this.panelIds[listIndex],\n selected,\n focus: selected && (focus || wasTabFocused),\n };\n\n if (selectedTabClassName) props.selectedClassName = selectedTabClassName;\n if (disabledTabClassName) props.disabledClassName = disabledTabClassName;\n\n listIndex++;\n\n return cloneElement(tab, props);\n }),\n });\n } else if (isTabPanel(child)) {\n const props = {\n id: this.panelIds[index],\n tabId: this.tabIds[index],\n selected: selectedIndex === index,\n };\n\n if (forceRenderTabPanel) props.forceRender = forceRenderTabPanel;\n if (selectedTabPanelClassName) props.selectedClassName = selectedTabPanelClassName;\n\n index++;\n\n result = cloneElement(child, props);\n }\n\n return result;\n });\n }\n\n handleKeyDown = e => {\n if (this.isTabFromContainer(e.target)) {\n let index = this.props.selectedIndex;\n let preventDefault = false;\n let useSelectedIndex = false;\n\n if (e.keyCode === 32 || e.keyCode === 13) {\n preventDefault = true;\n useSelectedIndex = false;\n this.handleClick(e);\n }\n\n if (e.keyCode === 37 || e.keyCode === 38) {\n // Select next tab to the left\n index = this.getPrevTab(index);\n preventDefault = true;\n useSelectedIndex = true;\n } else if (e.keyCode === 39 || e.keyCode === 40) {\n // Select next tab to the right\n index = this.getNextTab(index);\n preventDefault = true;\n useSelectedIndex = true;\n }\n\n // This prevents scrollbars from moving around\n if (preventDefault) {\n e.preventDefault();\n }\n\n // Only use the selected index in the state if we're not using the tabbed index\n if (useSelectedIndex) {\n this.setSelected(index, e);\n }\n }\n };\n\n handleClick = e => {\n let node = e.target;\n // eslint-disable-next-line no-cond-assign\n do {\n if (this.isTabFromContainer(node)) {\n if (isTabDisabled(node)) {\n return;\n }\n\n const index = [].slice\n .call(node.parentNode.children)\n .filter(isTabNode)\n .indexOf(node);\n this.setSelected(index, e);\n return;\n }\n } while ((node = node.parentNode) !== null);\n };\n\n /**\n * Determine if a node from event.target is a Tab element for the current Tabs container.\n * If the clicked element is not a Tab, it returns false.\n * If it finds another Tabs container between the Tab and `this`, it returns false.\n */\n isTabFromContainer(node) {\n // return immediately if the clicked element is not a Tab.\n if (!isTabNode(node)) {\n return false;\n }\n\n // Check if the first occurrence of a Tabs container is `this` one.\n let nodeAncestor = node.parentElement;\n do {\n if (nodeAncestor === this.node) return true;\n else if (nodeAncestor.getAttribute('data-tabs')) break;\n\n nodeAncestor = nodeAncestor.parentElement;\n } while (nodeAncestor);\n\n return false;\n }\n\n render() {\n // Delete all known props, so they don't get added to DOM\n const {\n children, // unused\n className,\n disabledTabClassName, // unused\n domRef,\n focus, // unused\n forceRenderTabPanel, // unused\n onSelect, // unused\n selectedIndex, // unused\n selectedTabClassName, // unused\n selectedTabPanelClassName, // unused\n ...attributes\n } = this.props;\n\n return (\n <div\n {...attributes}\n className={cx(className)}\n onClick={this.handleClick}\n onKeyDown={this.handleKeyDown}\n ref={node => {\n this.node = node;\n if (domRef) domRef(node);\n }}\n data-tabs\n >\n {this.getChildren()}\n </div>\n );\n }\n}\n","/*!\n Copyright (c) 2016 Jed Watson.\n Licensed under the MIT License (MIT), see\n http://jedwatson.github.io/classnames\n*/\n/* global define */\n\n(function () {\n\t'use strict';\n\n\tvar hasOwn = {}.hasOwnProperty;\n\n\tfunction classNames () {\n\t\tvar classes = [];\n\n\t\tfor (var i = 0; i < arguments.length; i++) {\n\t\t\tvar arg = arguments[i];\n\t\t\tif (!arg) continue;\n\n\t\t\tvar argType = typeof arg;\n\n\t\t\tif (argType === 'string' || argType === 'number') {\n\t\t\t\tclasses.push(arg);\n\t\t\t} else if (Array.isArray(arg)) {\n\t\t\t\tclasses.push(classNames.apply(null, arg));\n\t\t\t} else if (argType === 'object') {\n\t\t\t\tfor (var key in arg) {\n\t\t\t\t\tif (hasOwn.call(arg, key) && arg[key]) {\n\t\t\t\t\t\tclasses.push(key);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn classes.join(' ');\n\t}\n\n\tif (typeof module !== 'undefined' && module.exports) {\n\t\tmodule.exports = classNames;\n\t} else if (typeof define === 'function' && typeof define.amd === 'object' && define.amd) {\n\t\t// register as 'classnames', consistent with npm package name\n\t\tdefine('classnames', [], function () {\n\t\t\treturn classNames;\n\t\t});\n\t} else {\n\t\twindow.classNames = classNames;\n\t}\n}());\n","import PropTypes from 'prop-types';\nimport React, { Component } from 'react';\nimport { childrenPropType, onSelectPropType, selectedIndexPropType } from '../helpers/propTypes';\nimport UncontrolledTabs from './UncontrolledTabs';\nimport { getTabsCount } from '../helpers/count';\n\nexport default class Tabs extends Component {\n static defaultProps = {\n defaultFocus: false,\n forceRenderTabPanel: false,\n selectedIndex: null,\n defaultIndex: null,\n };\n\n static propTypes = {\n children: childrenPropType,\n className: PropTypes.oneOfType([PropTypes.string, PropTypes.array, PropTypes.object]),\n defaultFocus: PropTypes.bool,\n defaultIndex: PropTypes.number,\n disabledTabClassName: PropTypes.string,\n domRef: PropTypes.func,\n forceRenderTabPanel: PropTypes.bool,\n onSelect: onSelectPropType,\n selectedIndex: selectedIndexPropType,\n selectedTabClassName: PropTypes.string,\n selectedTabPanelClassName: PropTypes.string,\n };\n\n constructor(props) {\n super(props);\n\n this.state = Tabs.copyPropsToState(this.props, {}, this.props.defaultFocus);\n }\n\n componentWillReceiveProps(newProps) {\n if (\n process.env.NODE_ENV !== 'production' &&\n Tabs.inUncontrolledMode(newProps) !== Tabs.inUncontrolledMode(this.props)\n ) {\n throw new Error(\n `Switching between controlled mode (by using \\`selectedIndex\\`) and uncontrolled mode is not supported in \\`Tabs\\`.\nFor more information about controlled and uncontrolled mode of react-tabs see the README.`,\n );\n }\n // Use a transactional update to prevent race conditions\n // when reading the state in copyPropsToState\n // See https://github.com/reactjs/react-tabs/issues/51\n this.setState(state => Tabs.copyPropsToState(newProps, state));\n }\n\n static inUncontrolledMode(props) {\n return props.selectedIndex === null;\n }\n\n handleSelected = (index, last, event) => {\n // Call change event handler\n if (typeof this.props.onSelect === 'function') {\n // Check if the change event handler cancels the tab change\n if (this.props.onSelect(index, last, event) === false) return;\n }\n\n const state = {\n // Set focus if the change was triggered from the keyboard\n focus: event.type === 'keydown',\n };\n\n if (Tabs.inUncontrolledMode(this.props)) {\n // Update selected index\n state.selectedIndex = index;\n }\n\n this.setState(state);\n };\n\n // preserve the existing selectedIndex from state.\n // If the state has not selectedIndex, default to the defaultIndex or 0\n static copyPropsToState(props, state, focus = false) {\n const newState = {\n focus,\n };\n\n if (Tabs.inUncontrolledMode(props)) {\n const maxTabIndex = getTabsCount(props.children) - 1;\n let selectedIndex = null;\n\n if (state.selectedIndex != null) {\n selectedIndex = Math.min(state.selectedIndex, maxTabIndex);\n } else {\n selectedIndex = props.defaultIndex || 0;\n }\n newState.selectedIndex = selectedIndex;\n }\n\n return newState;\n }\n\n render() {\n const { children, defaultIndex, defaultFocus, ...props } = this.props;\n\n props.focus = this.state.focus;\n props.onSelect = this.handleSelected;\n\n if (this.state.selectedIndex != null) {\n props.selectedIndex = this.state.selectedIndex;\n }\n\n return <UncontrolledTabs {...props}>{children}</UncontrolledTabs>;\n }\n}\n\nTabs.tabsRole = 'Tabs';\n","import PropTypes from 'prop-types';\nimport React, { Component } from 'react';\nimport cx from 'classnames';\n\nexport default class TabList extends Component {\n static defaultProps = {\n className: 'react-tabs__tab-list',\n };\n\n static propTypes = {\n children: PropTypes.oneOfType([PropTypes.object, PropTypes.array]),\n className: PropTypes.oneOfType([PropTypes.string, PropTypes.array, PropTypes.object]),\n };\n\n render() {\n const { children, className, ...attributes } = this.props;\n\n return (\n <ul {...attributes} className={cx(className)} role=\"tablist\">\n {children}\n </ul>\n );\n }\n}\n\nTabList.tabsRole = 'TabList';\n","import PropTypes from 'prop-types';\nimport React, { Component } from 'react';\nimport cx from 'classnames';\n\nconst DEFAULT_CLASS = 'react-tabs__tab';\n\nexport default class Tab extends Component {\n static defaultProps = {\n className: DEFAULT_CLASS,\n disabledClassName: `${DEFAULT_CLASS}--disabled`,\n focus: false,\n id: null,\n panelId: null,\n selected: false,\n selectedClassName: `${DEFAULT_CLASS}--selected`,\n };\n\n static propTypes = {\n children: PropTypes.oneOfType([PropTypes.array, PropTypes.object, PropTypes.string]),\n className: PropTypes.oneOfType([PropTypes.string, PropTypes.array, PropTypes.object]),\n disabled: PropTypes.bool,\n tabIndex: PropTypes.string,\n disabledClassName: PropTypes.string,\n focus: PropTypes.bool, // private\n id: PropTypes.string, // private\n panelId: PropTypes.string, // private\n selected: PropTypes.bool, // private\n selectedClassName: PropTypes.string,\n tabRef: PropTypes.func, // private\n };\n\n componentDidMount() {\n this.checkFocus();\n }\n\n componentDidUpdate() {\n this.checkFocus();\n }\n\n checkFocus() {\n if (this.props.selected && this.props.focus) {\n this.node.focus();\n }\n }\n\n render() {\n const {\n children,\n className,\n disabled,\n disabledClassName,\n focus, // unused\n id,\n panelId,\n selected,\n selectedClassName,\n tabIndex,\n tabRef,\n ...attributes\n } = this.props;\n\n return (\n <li\n {...attributes}\n className={cx(className, {\n [selectedClassName]: selected,\n [disabledClassName]: disabled,\n })}\n ref={node => {\n this.node = node;\n if (tabRef) tabRef(node);\n }}\n role=\"tab\"\n id={id}\n aria-selected={selected ? 'true' : 'false'}\n aria-disabled={disabled ? 'true' : 'false'}\n aria-controls={panelId}\n tabIndex={tabIndex || (selected ? '0' : null)}\n >\n {children}\n </li>\n );\n }\n}\n\nTab.tabsRole = 'Tab';\n","import PropTypes from 'prop-types';\nimport React, { Component } from 'react';\nimport cx from 'classnames';\n\nconst DEFAULT_CLASS = 'react-tabs__tab-panel';\n\nexport default class TabPanel extends Component {\n static defaultProps = {\n className: DEFAULT_CLASS,\n forceRender: false,\n selectedClassName: `${DEFAULT_CLASS}--selected`,\n };\n\n static propTypes = {\n children: PropTypes.node,\n className: PropTypes.oneOfType([PropTypes.string, PropTypes.array, PropTypes.object]),\n forceRender: PropTypes.bool,\n id: PropTypes.string, // private\n selected: PropTypes.bool, // private\n selectedClassName: PropTypes.string,\n tabId: PropTypes.string, // private\n };\n\n render() {\n const {\n children,\n className,\n forceRender,\n id,\n selected,\n selectedClassName,\n tabId,\n ...attributes\n } = this.props;\n\n return (\n <div\n {...attributes}\n className={cx(className, {\n [selectedClassName]: selected,\n })}\n role=\"tabpanel\"\n id={id}\n aria-labelledby={tabId}\n >\n {forceRender || selected ? children : null}\n </div>\n );\n }\n}\n\nTabPanel.tabsRole = 'TabPanel';\n"],"names":["isTab","el","type","tabsRole","isTabPanel","isTabList","isTabChild","child","deepMap","children","callback","Children","map","props","babelHelpers.typeof","cloneElement","deepForEach","forEach","uuid","count","getTabsCount","tabCount","getPanelsCount","panelCount","isTabNode","node","getAttribute","isTabDisabled","canUseActiveElement","classNames","classes","i","arguments","length","arg","argType","push","Array","isArray","apply","key","hasOwn","call","join","hasOwnProperty","module","exports","window","document","activeElement","e","UncontrolledTabs","tabNodes","handleKeyDown","_this","isTabFromContainer","target","index","selectedIndex","preventDefault","useSelectedIndex","keyCode","handleClick","getPrevTab","getNextTab","setSelected","slice","parentNode","filter","indexOf","event","this","onSelect","getTab","getChildren","disabledTabClassName","focus","forceRenderTabPanel","selectedTabClassName","selectedTabPanelClassName","tabIds","panelIds","diff","result","listIndex","wasTabFocused","React","toArray","some","tab","_this2","selected","selectedClassName","disabledClassName","forceRender","nodeAncestor","parentElement","render","className","domRef","attributes","cx","Component","defaultProps","Tabs","handleSelected","last","state","inUncontrolledMode","setState","copyPropsToState","defaultFocus","componentWillReceiveProps","newProps","newState","maxTabIndex","Math","min","defaultIndex","TabList","Tab","componentDidMount","checkFocus","componentDidUpdate","disabled","id","panelId","tabIndex","tabRef","DEFAULT_CLASS","TabPanel","tabId"],"mappings":"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"}
\No newline at end of file