UNPKG

@eccenca/gui-elements

Version:

GUI elements based on other libraries, usable in React application, written in Typescript.

95 lines 8.12 kB
"use strict"; var __rest = (this && this.__rest) || function (s, e) { var t = {}; for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p]; if (s != null && typeof Object.getOwnPropertySymbols === "function") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) { if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]]; } return t; }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.ContentGroup = void 0; const react_1 = __importDefault(require("react")); const classnames_1 = __importDefault(require("classnames")); const color_1 = __importDefault(require("color")); const constants_1 = require("../../configuration/constants"); const index_1 = require("../index"); /** * Manage display of a grouped content section. * Add info, actions and context annotations by using its properties. * Can be nested into each other. */ const ContentGroup = (_a) => { var _b; var { children, className = "", title, contextInfo, annotation, actionOptions, isCollapsed = false, textToggleCollapse, handlerToggleCollapse, borderMainConnection = false, borderSubConnection = false, level = 1, minimumHeadlineLevel = 3, whitespaceSize = "small", style, stickyHeaderProps, description, hideGroupDivider, contentProps } = _a, otherContentWrapperProps = __rest(_a, ["children", "className", "title", "contextInfo", "annotation", "actionOptions", "isCollapsed", "textToggleCollapse", "handlerToggleCollapse", "borderMainConnection", "borderSubConnection", "level", "minimumHeadlineLevel", "whitespaceSize", "style", "stickyHeaderProps", "description", "hideGroupDivider", "contentProps"]); const displayHeader = title || handlerToggleCollapse; let borderGradient = undefined; if (typeof borderSubConnection === "object") { const borderColors = Array.isArray(borderSubConnection) ? borderSubConnection : [borderSubConnection]; borderGradient = borderColors.reduce((acc, borderColor, index) => { try { const color = (0, color_1.default)(borderColor); acc.push(`${color.rgb().toString()} ` + `${(index / borderColors.length) * 100}% ` + `${((index + 1) / borderColors.length) * 100}%`); } catch (_a) { // eslint-disable-next-line no-console console.warn("Received invalid background color for tag: " + borderColor); } return acc; }, []); } const contextInfoElements = Array.isArray(contextInfo) ? contextInfo : [contextInfo]; const _c = contentProps !== null && contentProps !== void 0 ? contentProps : {}, { className: contentClassName } = _c, otherContentProps = __rest(_c, ["className"]); const headerContent = displayHeader ? (react_1.default.createElement(react_1.default.Fragment, null, react_1.default.createElement(index_1.SectionHeader, { className: `${constants_1.CLASSPREFIX}-contentgroup__header` }, react_1.default.createElement(index_1.Toolbar, null, handlerToggleCollapse && (react_1.default.createElement(index_1.ToolbarSection, null, react_1.default.createElement(index_1.IconButton, { className: `${constants_1.CLASSPREFIX}-contentgroup__header__toggler`, name: isCollapsed ? "toggler-showmore" : "toggler-showless", text: textToggleCollapse !== null && textToggleCollapse !== void 0 ? textToggleCollapse : (isCollapsed ? "Show more" : "Show less"), onClick: handlerToggleCollapse }), react_1.default.createElement(index_1.Spacing, { vertical: true, size: "small" }))), title && (react_1.default.createElement(index_1.ToolbarSection, { canShrink: true }, react_1.default.createElement("h" + Math.min(Math.max(minimumHeadlineLevel, level + minimumHeadlineLevel), 6).toString(), { children: react_1.default.createElement(index_1.OverflowText, null, title), className: `${constants_1.CLASSPREFIX}-contentgroup__header__title`, }), description && (react_1.default.createElement(react_1.default.Fragment, null, react_1.default.createElement(index_1.Spacing, { vertical: true, size: "tiny" }), react_1.default.createElement(index_1.Tooltip, { content: description }, react_1.default.createElement(index_1.Icon, { name: "item-info", small: true, className: "dmapp--text-info" })))))), contextInfoElements && ((_b = contextInfoElements[0]) === null || _b === void 0 ? void 0 : _b.props) && Object.values(contextInfoElements[0].props).every((v) => v !== undefined) && (react_1.default.createElement(index_1.ToolbarSection, { className: `${constants_1.CLASSPREFIX}-contentgroup__header__context`, canGrow: true }, react_1.default.createElement("div", { className: `${constants_1.CLASSPREFIX}-contentgroup__content ` }, react_1.default.createElement(index_1.Spacing, { vertical: true, size: "tiny" }), contextInfoElements))), (!isCollapsed || !handlerToggleCollapse) && actionOptions && (react_1.default.createElement(index_1.ToolbarSection, { className: `${constants_1.CLASSPREFIX}-contentgroup__header__options` }, react_1.default.createElement(index_1.Spacing, { vertical: true, size: "small" }), actionOptions)))), (!isCollapsed || !handlerToggleCollapse) && (react_1.default.createElement(react_1.default.Fragment, null, !hideGroupDivider && react_1.default.createElement(index_1.Divider, { addSpacing: "small" }), react_1.default.createElement(index_1.Spacing, { size: whitespaceSize }))))) : (react_1.default.createElement(react_1.default.Fragment, null)); return (react_1.default.createElement(index_1.Section, Object.assign({ className: `${constants_1.CLASSPREFIX}-contentgroup` + (className ? ` ${className}` : "") + (whitespaceSize ? ` ${constants_1.CLASSPREFIX}-contentgroup--padding-${whitespaceSize}` : "") + (borderMainConnection ? ` ${constants_1.CLASSPREFIX}-contentgroup--border-main` : "") + (borderSubConnection ? ` ${constants_1.CLASSPREFIX}-contentgroup--border-sub` : ""), style: borderGradient ? Object.assign(Object.assign({}, (style !== null && style !== void 0 ? style : {})), { [`--${constants_1.CLASSPREFIX}-color-contentgroup-border-sub`]: borderGradient.join(", ") }) : style }, otherContentWrapperProps), headerContent && stickyHeaderProps ? (react_1.default.createElement(index_1.StickyTarget, Object.assign({}, stickyHeaderProps), headerContent)) : (headerContent), (!isCollapsed || !handlerToggleCollapse) && (react_1.default.createElement(react_1.default.Fragment, null, react_1.default.createElement("div", { className: `${constants_1.CLASSPREFIX}-contentgroup__content` }, react_1.default.createElement("div", Object.assign({ className: (0, classnames_1.default)(`${constants_1.CLASSPREFIX}-contentgroup__content__body`, contentClassName) }, otherContentProps), children), contextInfo && !displayHeader && (react_1.default.createElement("div", { className: `${constants_1.CLASSPREFIX}-contentgroup__content__context` }, contextInfoElements)), annotation && react_1.default.createElement("div", null, annotation), actionOptions && !displayHeader && (react_1.default.createElement("div", { className: `${constants_1.CLASSPREFIX}-contentgroup__content__options` }, actionOptions))))))); }; exports.ContentGroup = ContentGroup; //# sourceMappingURL=ContentGroup.js.map