import React from 'react'; import { Typography } from 'antd'; import { jsx } from 'react/jsx-runtime'; // src/react/index.tsx // src/core/classnames.ts var BASE_CLASS = "tach-typography"; var join = (...parts) => parts.filter(Boolean).join(" "); var tachTypographyClassName = ({ variant = "Body", color = "primary", weight = "normal", clickable = false, className } = {}) => { return join( BASE_CLASS, `${BASE_CLASS}--${variant}`, `${BASE_CLASS}--color-${color}`, weight === "bold" && `${BASE_CLASS}--bold`, clickable && `${BASE_CLASS}--pointer`, className ); }; // src/core/markdown.ts var TOKEN_PREFIX = "TACHMDTOKEN"; var SAFE_HREF_PATTERN = /^(https?:|mailto:|tel:|\/|#)/i; var escapeHtml = (value) => value.replace(/&/g, "&").replace(//g, ">").replace(/"/g, """).replace(/'/g, "'"); var normalizeMarkdown = (value) => value.replace(/\r\n?/g, "\n"); var sanitizeHref = (value) => { const href = value.trim(); if (!href || !SAFE_HREF_PATTERN.test(href)) { return null; } return href; }; var tachTypographyMarkdownToHtml = (markdown) => { const source = normalizeMarkdown(markdown); const tokenMap = /* @__PURE__ */ new Map(); let tokenId = 0; const tokenized = source.replace(/`([^`\n]+)`/g, (_match, code) => { const token = `${TOKEN_PREFIX}${tokenId++}`; tokenMap.set( token, `${escapeHtml(code)}` ); return token; }).replace(/\[([^\]\n]+)\]\(([^)\n]+)\)/g, (_match, label, hrefRaw) => { const token = `${TOKEN_PREFIX}${tokenId++}`; const href = sanitizeHref(hrefRaw); if (!href) { tokenMap.set(token, escapeHtml(label)); return token; } tokenMap.set( token, `${escapeHtml(label)}` ); return token; }); let html = escapeHtml(tokenized).replace(/\*\*([^*\n]+)\*\*/g, "$1").replace(/__([^_\n]+)__/g, "$1").replace(/\*([^*\n]+)\*/g, "$1").replace(/_([^_\n]+)_/g, "$1").replace(/~~([^~\n]+)~~/g, "$1").replace(/\n/g, "
"); html = html.replace(new RegExp(`${TOKEN_PREFIX}\\d+`, "g"), (token) => tokenMap.get(token) || token); return html; }; var createTypographyVariant = (Component, variant) => { const Variant = React.forwardRef( ({ color = "primary", weight = "normal", className, onClick, markdownEnabled = false, children, ...rest }, ref) => { const markdownHtml = markdownEnabled && typeof children === "string" ? tachTypographyMarkdownToHtml(children) : void 0; const renderedChildren = markdownHtml ? /* @__PURE__ */ jsx("span", { dangerouslySetInnerHTML: { __html: markdownHtml } }) : children; const contentProps = { children: renderedChildren }; return /* @__PURE__ */ jsx( Component, { ref, className: tachTypographyClassName({ variant, color, weight, className, clickable: Boolean(onClick) }), onClick, ...rest, ...contentProps } ); } ); Variant.displayName = String(variant); return Variant; }; var createTypographyComponent = (Component) => ({ LargeTitle: createTypographyVariant(Component, "LargeTitle"), Title1: createTypographyVariant(Component, "Title1"), Title2: createTypographyVariant(Component, "Title2"), Title3: createTypographyVariant(Component, "Title3"), Headline: createTypographyVariant(Component, "Headline"), Body: createTypographyVariant(Component, "Body"), Inputs: createTypographyVariant(Component, "Inputs"), Subheadline: createTypographyVariant(Component, "Subheadline"), FootnoteUnderline: createTypographyVariant(Component, "FootnoteUnderline"), Footnote: createTypographyVariant(Component, "Footnote"), Caption: createTypographyVariant(Component, "Caption"), Caption2: createTypographyVariant(Component, "Caption2"), AccentH1: createTypographyVariant(Component, "AccentH1"), AccentH2: createTypographyVariant(Component, "AccentH2"), AccentSubttl: createTypographyVariant(Component, "AccentSubttl"), AccentSubttl2: createTypographyVariant(Component, "AccentSubttl2"), AccentCaption: createTypographyVariant(Component, "AccentCaption"), AccentCaption2: createTypographyVariant(Component, "AccentCaption2"), AccentRegularM: createTypographyVariant(Component, "AccentRegularM"), AccentRegularS: createTypographyVariant(Component, "AccentRegularS"), AccentLargeTtl: createTypographyVariant(Component, "AccentLargeTtl"), AppMediumBody: createTypographyVariant(Component, "AppMediumBody"), AppMediumSubtext: createTypographyVariant(Component, "AppMediumSubtext"), AppMediumSubtextUnderline: createTypographyVariant(Component, "AppMediumSubtextUnderline") }); var TachTypography = { Text: createTypographyComponent(Typography.Text), Paragraph: createTypographyComponent(Typography.Paragraph), Link: createTypographyComponent(Typography.Link), Title: createTypographyComponent(Typography.Title) }; export { TachTypography }; //# sourceMappingURL=index.js.map //# sourceMappingURL=index.js.map