UNPKG

collaborative-ui

Version:

React component library for building real-time collaborative editing applications.

72 lines (71 loc) 2.63 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.JsonBlockText = void 0; const tslib_1 = require("tslib"); const React = tslib_1.__importStar(require("react")); const HighlightCode_1 = tslib_1.__importDefault(require("nice-ui/lib/1-inline/HighlightCode")); const shared_1 = require("@jsonjoy.com/json-pack/lib/cbor/shared"); const JsonEncoder_1 = require("@jsonjoy.com/json-pack/lib/json/JsonEncoder"); const nano_theme_1 = require("nano-theme"); const select_1 = require("../../util/select"); const use_t_1 = require("use-t"); const encoder = new JsonEncoder_1.JsonEncoder(shared_1.encoder.writer); const css = { block: (0, nano_theme_1.rule)({ pos: 'relative', }), text: (0, nano_theme_1.rule)({ ...nano_theme_1.theme.font.mono.mid, fz: '12px', pd: '8px 4px 0', mr: 0, w: '100%', ovx: 'auto', bxz: 'border-box', code: { ...nano_theme_1.theme.font.mono.mid, fz: '12px', }, }), size: (0, nano_theme_1.rule)({ pos: 'absolute', b: '-2px', r: '0px', pd: '2px 4px', mr: '-2px', bxz: 'border-box', fz: '0.85em', bdrad: '3px', us: 'none', pe: 'none', }), }; const JsonBlockText = ({ value, path, plain, tab = 2, wrap }) => { const [t] = (0, use_t_1.useT)(); const theme = (0, nano_theme_1.useTheme)(); // biome-ignore lint: manual dependency list const json = React.useMemo(() => { const selected = (0, select_1.select)(value, path); const encoded = new TextDecoder().decode(encoder.encode(selected)); return tab ? JSON.stringify(JSON.parse(encoded), null, tab) : encoded; }, [value, path]); const style = { color: theme.g(0.2), wordWrap: wrap ? 'normal' : undefined, width: wrap ? '100%' : undefined, }; let element = !!plain ? React.createElement("code", { style: style }, json) : React.createElement(HighlightCode_1.default, { code: json, lang: 'json' }); if (wrap) { element = React.createElement("div", { className: css.text }, element); } else { element = React.createElement("pre", { className: css.text }, element); } return (React.createElement("div", { className: css.block }, element, React.createElement("div", { className: css.size, style: { color: theme.g(0, 0.3), background: theme.g(0.98, 0.9) } }, json.length.toLocaleString(), " ", t('Unicode codepoints')))); }; exports.JsonBlockText = JsonBlockText;