UNPKG

@formant/ava-react

Version:

React components of AVA.

169 lines (167 loc) 7.28 kB
var __create = Object.create; var __defProp = Object.defineProperty; var __getOwnPropDesc = Object.getOwnPropertyDescriptor; var __getOwnPropNames = Object.getOwnPropertyNames; var __getProtoOf = Object.getPrototypeOf; var __hasOwnProp = Object.prototype.hasOwnProperty; var __export = (target, all) => { for (var name in all) __defProp(target, name, { get: all[name], enumerable: true }); }; var __copyProps = (to, from, except, desc) => { if (from && typeof from === "object" || typeof from === "function") { for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); } return to; }; var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( // If the importer is in node compatibility mode or this is not an ESM // file that has been converted to a CommonJS file using a Babel- // compatible transform (i.e. "__esModule" has not been set), then set // "default" to the CommonJS "module.exports" for node compatibility. isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, mod )); var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); // src/NarrativeTextVis/phrases/Phrase.tsx var Phrase_exports = {}; __export(Phrase_exports, { Phrase: () => Phrase }); module.exports = __toCommonJS(Phrase_exports); var import_react = __toESM(require("react")); var import_antd = require("antd"); var import_ava = require("@formant/ava"); var import_lodash = require("lodash"); var import_katex = __toESM(require("katex")); var import_styled = require("../styled"); var import_utils = require("../../utils"); var import_plugin = require("../chore/plugin"); function renderPhraseByDescriptor({ spec, descriptor, themeStyles, events }) { const { value = "", metadata = {}, styles: specStyles = {} } = spec; const theme = "dark"; const { overwrite, classNames, style: descriptorStyle, onHover, tooltip, onClick, content = () => value } = descriptor || {}; const handleClick = () => { var _a; onClick == null ? void 0 : onClick(spec == null ? void 0 : spec.value, metadata, themeStyles); (_a = events == null ? void 0 : events.onClickPhrase) == null ? void 0 : _a.call(events, spec); }; const handleMouseEnter = () => { var _a; onHover == null ? void 0 : onHover(spec == null ? void 0 : spec.value, metadata, themeStyles); (_a = events == null ? void 0 : events.onMouseEnterPhrase) == null ? void 0 : _a.call(events, spec); }; const handleMouseLeave = () => { var _a; (_a = events == null ? void 0 : events.onMouseLeavePhrase) == null ? void 0 : _a.call(events, spec); }; let defaultNode = /* @__PURE__ */ import_react.default.createElement( import_styled.Entity, { style: { // ...functionalize(descriptorStyle, {})(spec?.value, metadata as any, themeStyles), // ...specStyles, }, className: (0, import_utils.classnames)( // `${NTV_PREFIX_CLS}-value`, // isEntityPhrase(spec) ? `${NTV_PREFIX_CLS}-${kebabCase(spec.metadata.entityType)}` : '', // ...functionalize(classNames, [])(spec?.value, metadata as any, themeStyles) ) }, content(value, metadata, themeStyles) ); if ((0, import_lodash.isFunction)(overwrite)) { defaultNode = overwrite(defaultNode, value, metadata, themeStyles); } const nodeWithEvents = !(0, import_lodash.isEmpty)(events) || (0, import_lodash.isFunction)(onClick) || (0, import_lodash.isFunction)(onHover) ? /* @__PURE__ */ import_react.default.createElement("span", { onClick: handleClick, onMouseEnter: handleMouseEnter, onMouseLeave: handleMouseLeave }, defaultNode) : defaultNode; const showTooltip = tooltip && (tooltip == null ? void 0 : tooltip.title(value, metadata, themeStyles)); return !(0, import_lodash.isNil)(showTooltip) ? /* @__PURE__ */ import_react.default.createElement( import_antd.Tooltip, { ...tooltip, overlayInnerStyle: void 0, title: showTooltip }, nodeWithEvents ) : nodeWithEvents; } var Phrase = ({ spec: phrase, size = "normal", theme = "dark", palette, pluginManager = import_plugin.presetPluginManager, ...events }) => { const themeStyles = { size, theme, palette }; const eventProps = !(0, import_lodash.isEmpty)(events) ? { onClick: () => { var _a; (_a = events == null ? void 0 : events.onClickPhrase) == null ? void 0 : _a.call(events, phrase); }, onMouseEnter: () => { var _a; (_a = events == null ? void 0 : events.onMouseEnterPhrase) == null ? void 0 : _a.call(events, phrase); }, onMouseLeave: () => { var _a; (_a = events == null ? void 0 : events.onMouseLeavePhrase) == null ? void 0 : _a.call(events, phrase); } } : {}; let defaultText = /* @__PURE__ */ import_react.default.createElement(import_react.default.Fragment, null, phrase.value); if ((0, import_ava.isTextPhrase)(phrase)) { if (phrase.bold) defaultText = /* @__PURE__ */ import_react.default.createElement(import_styled.Bold, null, defaultText); if (phrase.italic) defaultText = /* @__PURE__ */ import_react.default.createElement(import_styled.Italic, null, defaultText); if (phrase.underline) defaultText = /* @__PURE__ */ import_react.default.createElement(import_styled.Underline, null, defaultText); if (phrase.url) defaultText = /* @__PURE__ */ import_react.default.createElement("a", { target: "_blank", rel: "noreferrer", href: phrase.url }, defaultText); return /* @__PURE__ */ import_react.default.createElement("span", { ...eventProps }, defaultText); } if ((0, import_ava.isEscapePhrase)(phrase)) return /* @__PURE__ */ import_react.default.createElement("pre", { ...eventProps }, phrase.value); if ((0, import_ava.isFormulaPhrase)(phrase)) return /* @__PURE__ */ import_react.default.createElement( import_styled.FormulaWrapper, { ...eventProps, dangerouslySetInnerHTML: { __html: import_katex.default.renderToString(phrase.value, { throwOnError: false, displayMode: true, strict: "ignore", fleqn: true }) } } ); if ((0, import_ava.isImagePhrase)(phrase)) { return /* @__PURE__ */ import_react.default.createElement("img", { ...eventProps, src: phrase.value, alt: phrase.alt, className: (0, import_utils.classnames)(phrase.className), style: phrase.styles }); } const descriptor = pluginManager == null ? void 0 : pluginManager.getPhraseDescriptorBySpec(phrase); if (descriptor) { return /* @__PURE__ */ import_react.default.createElement(import_react.default.Fragment, null, renderPhraseByDescriptor({ spec: phrase, descriptor, themeStyles, events })); } return !(0, import_lodash.isEmpty)(events) ? /* @__PURE__ */ import_react.default.createElement("span", { ...eventProps }, defaultText) : defaultText; }; // Annotate the CommonJS export names for ESM import in node: 0 && (module.exports = { Phrase });