UNPKG

@fluentui/react-northstar

Version:
182 lines (181 loc) 6.68 kB
import _extends from "@babel/runtime/helpers/esm/extends"; import { useStyles, useFluentContext, useTelemetry, useUnhandledProps } from '@fluentui/react-bindings'; import * as React from 'react'; import * as PropTypes from 'prop-types'; import cx from 'classnames'; import { createShorthandFactory, pxToRem, commonPropTypes, rtlTextContainer } from '../../utils'; import { Layout } from '../Layout/Layout'; export var itemLayoutClassName = 'ui-itemlayout'; export var itemLayoutSlotClassNames = { header: itemLayoutClassName + "__header", headerMedia: itemLayoutClassName + "__headerMedia", main: itemLayoutClassName + "__main", content: itemLayoutClassName + "__content", contentMedia: itemLayoutClassName + "__contentMedia", media: itemLayoutClassName + "__media", endMedia: itemLayoutClassName + "__endMedia" }; /** * (DEPRECATED) The Item Layout handles layout styles for menu items, list items and other similar item templates. */ export var ItemLayout = /*#__PURE__*/function () { var ItemLayout = function ItemLayout(props) { var context = useFluentContext(); var _useTelemetry = useTelemetry(ItemLayout.displayName, context.telemetry), setStart = _useTelemetry.setStart, setEnd = _useTelemetry.setEnd; setStart(); var as = props.as, debug = props.debug, endMedia = props.endMedia, media = props.media, renderMainArea = props.renderMainArea, rootCSS = props.rootCSS, mediaCSS = props.mediaCSS, endMediaCSS = props.endMediaCSS, className = props.className, design = props.design, styles = props.styles, variables = props.variables; var unhandledProps = useUnhandledProps(ItemLayout.handledProps, props); var _useStyles = useStyles(ItemLayout.displayName, { className: itemLayoutClassName, mapPropsToInlineStyles: function mapPropsToInlineStyles() { return { className: className, design: design, styles: styles, variables: variables }; }, rtl: context.rtl }), classes = _useStyles.classes, resolvedStyles = _useStyles.styles; var startArea = media; var mainArea = renderMainArea(props, classes); var endArea = endMedia; var mergedMediaClasses = cx(itemLayoutSlotClassNames.media, classes.media); var mergedEndMediaClasses = cx(itemLayoutSlotClassNames.endMedia, classes.endMedia); var element = /*#__PURE__*/React.createElement(Layout, _extends({ as: as, className: classes.root, styles: resolvedStyles.root, rootCSS: rootCSS, alignItems: "center", gap: pxToRem(8), debug: debug, reducing: true, start: startArea && /*#__PURE__*/React.createElement("span", { style: mediaCSS, className: mergedMediaClasses }, rtlTextContainer.createFor({ element: startArea })), main: mainArea, end: endArea && /*#__PURE__*/React.createElement("span", { style: endMediaCSS, className: mergedEndMediaClasses }, rtlTextContainer.createFor({ element: endArea })) }, unhandledProps)); setEnd(); return element; }; ItemLayout.displayName = 'ItemLayout'; ItemLayout.propTypes = Object.assign({}, commonPropTypes.createCommon({ accessibility: false, children: false, content: false }), { contentMedia: PropTypes.any, content: PropTypes.any, debug: PropTypes.bool, header: PropTypes.any, endMedia: PropTypes.any, headerMedia: PropTypes.any, media: PropTypes.any, renderContentArea: PropTypes.func, renderHeaderArea: PropTypes.func, renderMainArea: PropTypes.func, rootCSS: PropTypes.object, mediaCSS: PropTypes.object, headerCSS: PropTypes.object, headerMediaCSS: PropTypes.object, contentCSS: PropTypes.object, contentMediaCSS: PropTypes.object, endMediaCSS: PropTypes.object }); ItemLayout.defaultProps = { renderMainArea: function renderMainArea(props, classes) { var renderHeaderArea = props.renderHeaderArea, renderContentArea = props.renderContentArea; var headerArea = renderHeaderArea(props, classes); var contentArea = renderContentArea(props, classes); return /*#__PURE__*/React.createElement("div", { className: itemLayoutSlotClassNames.main, style: { gridTemplateRows: '1fr 1fr' } }, headerArea, contentArea); }, renderHeaderArea: function renderHeaderArea(props, classes) { var debug = props.debug, header = props.header, headerMedia = props.headerMedia, headerCSS = props.headerCSS, headerMediaCSS = props.headerMediaCSS; var mergedClasses = cx(itemLayoutSlotClassNames.header, classes.header); var mediaClasses = cx(itemLayoutSlotClassNames.headerMedia, classes.headerMedia); return !header && !headerMedia ? null : /*#__PURE__*/React.createElement(Layout, { className: mergedClasses, alignItems: "end", gap: pxToRem(8), debug: debug, main: rtlTextContainer.createFor({ element: header }), rootCSS: headerCSS, end: headerMedia && /*#__PURE__*/React.createElement("span", { style: headerMediaCSS, className: mediaClasses }, rtlTextContainer.createFor({ element: headerMedia })) }); }, renderContentArea: function renderContentArea(props, classes) { var debug = props.debug, content = props.content, contentMedia = props.contentMedia, contentCSS = props.contentCSS, contentMediaCSS = props.contentMediaCSS; var mergedClasses = cx(itemLayoutSlotClassNames.content, classes.content); var mediaClasses = cx(itemLayoutSlotClassNames.contentMedia, classes.contentMedia); return !content && !contentMedia ? null : /*#__PURE__*/React.createElement(Layout, { className: mergedClasses, alignItems: "start", gap: pxToRem(8), debug: debug, rootCSS: contentCSS, main: rtlTextContainer.createFor({ element: content }), end: contentMedia && /*#__PURE__*/React.createElement("span", { style: contentMediaCSS, className: mediaClasses }, rtlTextContainer.createFor({ element: contentMedia })) }); } }; ItemLayout.handledProps = Object.keys(ItemLayout.propTypes); ItemLayout.create = createShorthandFactory({ Component: ItemLayout, mappedProp: 'content' }); return ItemLayout; }(); //# sourceMappingURL=ItemLayout.js.map