UNPKG

@cimpress/react-components

Version:
164 lines (162 loc) 6.21 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); __setModuleDefault(result, mod); return result; }; 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.TabCard = void 0; const react_1 = __importStar(require("react")); const css_1 = require("@emotion/css"); const cvar_1 = __importDefault(require("./theme/cvar")); const cardTabNavCss = (0, css_1.css) ` // override for docusaurus css li + li { margin: 0; } border-radius: inherit; list-style: none; padding: 0; display: flex; justify-content: space-between; `; const navLinkCss = (0, css_1.css) ` color: ${(0, cvar_1.default)('color-tabcard-text-selected')}; &:hover { background: ${(0, cvar_1.default)('color-hover')}; } `; const navItemActiveCss = (0, css_1.css) ` background: ${(0, cvar_1.default)('color-background')}; color: ${(0, cvar_1.default)('color-tabcard-text-selected')}; > a { ${navLinkCss} } `; const navItemCss = (0, css_1.css) ` background-color: ${(0, cvar_1.default)('color-nav-item-background')}; border-right: 1px solid ${(0, cvar_1.default)('color-background')}; display: inline-block; flex-basis: 0; flex-grow: 1; text-align: center; cursor: pointer; > a { color: ${(0, cvar_1.default)('color-nav-text')}; position: relative; display: flex; flex-direction: column; flex: 1 1 auto; padding: ${(0, cvar_1.default)('spacing-8')} ${(0, cvar_1.default)('spacing-16')}; &:hover { text-decoration: none; } } &.active { ${navItemActiveCss} } &:hover { background-color: ${(0, cvar_1.default)('color-hover')}; color: ${(0, cvar_1.default)('color-text-interactive')}; } &:first-of-type { border-top-left-radius: inherit; } &:last-of-type { border-top-right-radius: inherit; border-right: none; } `; const cardFooterCss = (0, css_1.css) ` padding: ${(0, cvar_1.default)('spacing-8')} ${(0, cvar_1.default)('spacing-16')}; background-color: ${(0, cvar_1.default)('color-background-light')}; border-top: 1px solid ${(0, cvar_1.default)('color-border-light')}; text-align: left; cursor: default; `; const cardBlockCss = (0, css_1.css) ` position: relative; display: flex; flex-direction: column; background-color: ${(0, cvar_1.default)('color-background')}; flex: 1 1 auto; padding: ${(0, cvar_1.default)('spacing-16')}; text-align: left; cursor: default; `; const tabCardCss = (0, css_1.css) ` border: 1px solid ${(0, cvar_1.default)('color-border-default')}; border-radius: ${(0, cvar_1.default)('spacing-4')}; width: 100%; `; /** * A Component implementing a card with internal tabs in the header */ const TabCard = (_a) => { var { selectedIndex, onSelect = () => { }, tabs = [] } = _a, rest = __rest(_a, ["selectedIndex", "onSelect", "tabs"]); const initialSelectedIndex = selectedIndex != null && selectedIndex >= 0 ? selectedIndex : 0; const [localSelectedIndex, setLocalSelectedIndex] = (0, react_1.useState)(initialSelectedIndex); const onTabSelect = (e, selectedKey) => { e.preventDefault(); setLocalSelectedIndex(selectedKey); if (onSelect) { onSelect(e, selectedKey); } }; (0, react_1.useEffect)(() => { if (selectedIndex != null && selectedIndex >= 0) { setLocalSelectedIndex(selectedIndex); } }, [setLocalSelectedIndex, selectedIndex]); const renderTab = (tabInfo, tabIndex) => { var _a; return (react_1.default.createElement("li", { key: tabIndex, className: (0, css_1.cx)(navItemCss, { active: tabIndex === localSelectedIndex }) }, react_1.default.createElement("a", { href: (_a = tabInfo.href) !== null && _a !== void 0 ? _a : undefined, className: navLinkCss, onClick: e => onTabSelect(e, tabIndex) }, react_1.default.createElement("strong", null, tabInfo.name)))); }; const renderTabNav = () => react_1.default.createElement("ul", { className: cardTabNavCss }, tabs.map(renderTab)); const renderFooter = () => { if (tabs[localSelectedIndex].footer) { return react_1.default.createElement("div", { className: cardFooterCss }, tabs[localSelectedIndex].footer); } return null; }; return (react_1.default.createElement("div", Object.assign({ className: (0, css_1.cx)('crc-tab-card', tabCardCss) }, rest), react_1.default.createElement("div", null, renderTabNav()), react_1.default.createElement("div", { className: cardBlockCss }, tabs[localSelectedIndex].block), renderFooter())); }; exports.TabCard = TabCard; //# sourceMappingURL=TabCard.js.map