@activecollab/components
Version:
ActiveCollab Components
199 lines (191 loc) • 8.14 kB
JavaScript
;
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