UNPKG

@activecollab/components

Version:

ActiveCollab Components

199 lines (191 loc) 8.14 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.portableTextDefaultMarkRenderers = exports.portableTextDefaultBlockRenderers = void 0; var _react = _interopRequireWildcard(require("react")); var _Styles = require("./Styles"); var _types = require("./types"); var _Media = require("../Media"); var _Tables = require("../Tables"); var _TitledText = require("../TitledText"); var _Typography = require("../Typography"); var _Typography2 = require("../Typography/Typography"); function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); } /** * The default renderers for the universal set — everything a client renders * without injection, and nothing more: no product element ever lands here. * Injected {@link PortableTextComponents} maps take precedence entry by entry. */ var portableTextDefaultMarkRenderers = exports.portableTextDefaultMarkRenderers = { strong: function strong(_ref) { var children = _ref.children; return /*#__PURE__*/_react.default.createElement("strong", null, children); }, em: function em(_ref2) { var children = _ref2.children; return /*#__PURE__*/_react.default.createElement("em", null, children); }, code: function code(_ref3) { var children = _ref3.children; return /*#__PURE__*/_react.default.createElement(_Styles.StyledCode, null, children); }, link: function link(_ref4) { var mark = _ref4.mark, children = _ref4.children; var href = mark === null || mark === void 0 ? void 0 : mark.href; // A link mark without an href (authored as a plain string) has nowhere // to go — keep the text, skip the anchor. if (!href) { return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, children); } return /*#__PURE__*/_react.default.createElement(_Styles.StyledLink, { href: href, target: "_blank", rel: "noopener noreferrer" }, children); } }; /** The semantic wire levels resolve to typography only here, in the renderer. */ var HEADING_LEVEL_VARIANTS = { 1: "title1", 2: "title2", 3: "header2" }; /** The level `heading` and `titled-text` fall back to. */ var DEFAULT_HEADING_LEVEL = 3; /** * Resolve a semantic wire level to its typography variant. An absent level is * the documented default; any other unrecognised level is a serializer bug on * a fixed 1–3 scale, so it falls back to the default and is logged, per the * contract's degradation rule. */ var headingVariantForLevel = function headingVariantForLevel(level) { if (level === undefined) { return HEADING_LEVEL_VARIANTS[DEFAULT_HEADING_LEVEL]; } var variant = HEADING_LEVEL_VARIANTS[level]; if (!variant) { console.warn("PortableText: unknown heading level ".concat(level, ", falling back to ").concat(DEFAULT_HEADING_LEVEL, ".")); return HEADING_LEVEL_VARIANTS[DEFAULT_HEADING_LEVEL]; } return variant; }; /** Heading levels map to the same typography TitledText uses. */ var HeadingBlock = function HeadingBlock(_ref5) { var block = _ref5.block, children = _ref5.children; var _ref6 = block, level = _ref6.level, id = _ref6.id; var Heading = _TitledText.titledTextHeadings[headingVariantForLevel(level)]; return /*#__PURE__*/_react.default.createElement(Heading, { id: id }, children); }; var portableTextDefaultBlockRenderers = exports.portableTextDefaultBlockRenderers = { paragraph: function paragraph(_ref7) { var children = _ref7.children; return /*#__PURE__*/_react.default.createElement(_Typography.Body1, null, children); }, heading: HeadingBlock, list: function list(_ref8) { var block = _ref8.block, children = _ref8.children; var ordered = block.style === "number"; return ( /*#__PURE__*/ // `data-portable-list` scopes the depth-marker rules in Styles.ts to // design-system lists, and marks the ancestors those rules count. _react.default.createElement(_Styles.StyledList, { as: ordered ? "ol" : "ul", $ordered: ordered, "data-portable-list": "" }, children) ); }, "list-item": function listItem(_ref9) { var children = _ref9.children; return /*#__PURE__*/_react.default.createElement(_Typography2.Typography, { variant: "Body 1", as: "li" }, children); }, media: function media(_ref0) { var block = _ref0.block; var _ref1 = block, src = _ref1.src, alt = _ref1.alt, variant = _ref1.variant, caption = _ref1.caption; // Video (and future) variants carry service semantics, so their renderer // is application-catalog territory — an injected `media` override. The // universal set covers images only; anything else degrades and warns, per // the contract's degradation rule. if (variant !== undefined && !(0, _types.isPortableTextMediaImageVariant)(variant)) { console.warn("PortableText: no default renderer for media variant \"".concat(variant, "\".")); return null; } return /*#__PURE__*/_react.default.createElement(_Media.Media, { src: src, alt: alt, variant: variant, caption: caption }); }, "titled-text": function titledText(_ref10) { var block = _ref10.block, children = _ref10.children; var _ref11 = block, title = _ref11.title, level = _ref11.level; return /*#__PURE__*/_react.default.createElement(_TitledText.TitledText, { title: title, variant: headingVariantForLevel(level) }, children); }, // No highlighter ships with the default set, so every language — known, // unknown or absent — is plain preformatted text; the hint travels on // data-language for surfaces that highlight. "code-block": function codeBlock(_ref12) { var block = _ref12.block; var _ref13 = block, code = _ref13.code, language = _ref13.language; return /*#__PURE__*/_react.default.createElement(_Styles.StyledCodeBlock, { "data-language": language || undefined }, /*#__PURE__*/_react.default.createElement("code", null, code)); }, table: function table(_ref14) { var block = _ref14.block, renderSpans = _ref14.renderSpans; var _ref15 = block, header = _ref15.header, rows = _ref15.rows; // Standalone (engine-less) use has no span renderer — keep the raw text. var cell = function cell(spans) { return renderSpans ? renderSpans(spans) : spans.map(function (span, index) { return /*#__PURE__*/_react.default.createElement(_react.Fragment, { key: index }, span.text); }); }; return /*#__PURE__*/_react.default.createElement(_Styles.StyledTableBlock, null, /*#__PURE__*/_react.default.createElement(_Tables.Table, null, /*#__PURE__*/_react.default.createElement(_Tables.Thead, null, /*#__PURE__*/_react.default.createElement("tr", null, header.map(function (spans, index) { return /*#__PURE__*/_react.default.createElement("th", { key: index }, cell(spans)); }))), /*#__PURE__*/_react.default.createElement(_Tables.Tbody, null, rows.map(function (row, rowIndex) { return /*#__PURE__*/_react.default.createElement("tr", { key: rowIndex }, row.map(function (spans, cellIndex) { return /*#__PURE__*/_react.default.createElement("td", { key: cellIndex }, cell(spans)); })); })))); }, divider: function divider() { return /*#__PURE__*/_react.default.createElement(_Styles.StyledDivider, null); } }; //# sourceMappingURL=renderers.js.map