UNPKG

@fluentui/react-northstar

Version:
158 lines (156 loc) 7.75 kB
"use strict"; exports.__esModule = true; exports.treeClassName = exports.Tree = void 0; var _accessibility = require("@fluentui/accessibility"); var _reactBindings = require("@fluentui/react-bindings"); var customPropTypes = _interopRequireWildcard(require("@fluentui/react-proptypes")); var PropTypes = _interopRequireWildcard(require("prop-types")); var React = _interopRequireWildcard(require("react")); var _TreeItem = require("./TreeItem"); var _TreeTitle = require("./TreeTitle"); var _utils = require("../../utils"); var _useTree2 = require("./hooks/useTree"); var _context = require("./context"); function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); } function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; } var treeClassName = 'ui-tree'; exports.treeClassName = treeClassName; /** * A Tree displays data organised in tree hierarchy. * * @accessibility * Implements [ARIA TreeView](https://www.w3.org/TR/wai-aria-practices-1.1/#TreeView) design pattern. * @accessibilityIssues * [Treeview - JAWS doesn't narrate position for each tree item](https://github.com/FreedomScientific/VFO-standards-support/issues/338) * [Aria-selected and aria-checked are not output correctly for trees #432](https://github.com/FreedomScientific/VFO-standards-support/issues/432) * [Aria compliant trees are read as empty tables](https://bugs.chromium.org/p/chromium/issues/detail?id=1048770) * [VoiceOver narrates "selected false" for DOM with role=option and no aria-selected attribute](http://www.openradar.me/FB8050959) * [VoiceOver does not support Aria 1.2 listbox role owning unselectable group role](http://www.openradar.me/FB8050958) * [Tree as table in Mac > VoiceOver narrates " no selection " when user navigates to tree/table](https://bugs.chromium.org/p/chromium/issues/detail?id=1273538) * [Tree as table in Mac > VoiceOver narrates " 0 items enclosed " when user navigates to expaded treeitem](https://bugs.chromium.org/p/chromium/issues/detail?id=1273540) * [Tree as table in Mac > VoiceOver doesn't narrate aria-labelledby element on treeitem](https://bugs.chromium.org/p/chromium/issues/detail?id=1273544) */ var Tree = /*#__PURE__*/React.forwardRef(function (props, ref) { var context = (0, _reactBindings.useFluentContext)(); var _useTelemetry = (0, _reactBindings.useTelemetry)(Tree.displayName, context.telemetry), setStart = _useTelemetry.setStart, setEnd = _useTelemetry.setEnd; setStart(); var selectable = props.selectable, children = props.children, renderedItems = props.renderedItems, className = props.className, design = props.design, styles = props.styles, variables = props.variables; var ElementType = (0, _reactBindings.getElementType)(props); var unhandledProps = (0, _reactBindings.useUnhandledProps)(Tree.handledProps, props); var getA11yProps = (0, _reactBindings.useAccessibility)(props.accessibility, { debugName: Tree.displayName, rtl: context.rtl, mapPropsToBehavior: function mapPropsToBehavior() { return { selectable: selectable }; } }); var _useStyles = (0, _reactBindings.useStyles)(Tree.displayName, { className: treeClassName, mapPropsToInlineStyles: function mapPropsToInlineStyles() { return { className: className, design: design, styles: styles, variables: variables }; }, rtl: context.rtl, unstyled: props.unstyled }), classes = _useStyles.classes; var _useTree = (0, _useTree2.useTree)(props), visibleItemIds = _useTree.visibleItemIds, getItemById = _useTree.getItemById, registerItemRef = _useTree.registerItemRef, toggleItemActive = _useTree.toggleItemActive, focusItemById = _useTree.focusItemById, expandSiblings = _useTree.expandSiblings, toggleItemSelect = _useTree.toggleItemSelect, getToFocusIDByFirstCharacter = _useTree.getToFocusIDByFirstCharacter; var contextValue = React.useMemo(function () { return { getItemById: getItemById, registerItemRef: registerItemRef, toggleItemActive: toggleItemActive, expandSiblings: expandSiblings, focusItemById: focusItemById, toggleItemSelect: toggleItemSelect, getToFocusIDByFirstCharacter: getToFocusIDByFirstCharacter }; }, [getItemById, registerItemRef, toggleItemActive, focusItemById, expandSiblings, toggleItemSelect, getToFocusIDByFirstCharacter]); var renderContent = function renderContent() { return visibleItemIds.map(function (id) { var item = getItemById(id); var expanded = item.expanded, parent = item.parent, level = item.level, index = item.index, treeSize = item.treeSize; return _TreeItem.TreeItem.create(item.item, { defaultProps: function defaultProps() { return getA11yProps('item', { renderItemTitle: props.renderItemTitle }); }, overrideProps: { expanded: expanded, parent: parent, key: id, level: level, index: index, treeSize: treeSize, selectable: selectable ? item.item.selectable : false } }); }); }; var element = /*#__PURE__*/React.createElement(_context.TreeContext.Provider, { value: contextValue }, getA11yProps.unstable_wrapWithFocusZone( /*#__PURE__*/React.createElement(ElementType, getA11yProps('root', Object.assign({ className: classes.root, ref: ref }, _utils.rtlTextContainer.getAttributes({ forElements: [children] }), unhandledProps)), (0, _utils.childrenExist)(children) ? children : renderedItems ? renderedItems(renderContent()) : renderContent()))); setEnd(); return element; }); exports.Tree = Tree; Tree.displayName = 'Tree'; Tree.propTypes = Object.assign({}, _utils.commonPropTypes.createCommon({ content: false }), { activeItemIds: customPropTypes.collectionShorthand, selectedItemIds: customPropTypes.collectionShorthand, defaultActiveItemIds: customPropTypes.collectionShorthand, defaultSelectedItemIds: customPropTypes.collectionShorthand, exclusive: PropTypes.bool, selectable: PropTypes.bool, unstyled: PropTypes.bool, items: customPropTypes.collectionObjectShorthand, onActiveItemIdsChange: PropTypes.func, onSelectedItemIdsChange: PropTypes.func, renderItemTitle: PropTypes.func, renderedItems: PropTypes.func }); Tree.Item = _TreeItem.TreeItem; Tree.Title = _TreeTitle.TreeTitle; Tree.defaultProps = { accessibility: _accessibility.treeBehavior }; Tree.handledProps = Object.keys(Tree.propTypes); Tree.create = (0, _utils.createShorthandFactory)({ Component: Tree, mappedArrayProp: 'items' }); //# sourceMappingURL=Tree.js.map