From cacbc016ec544e11ff85e3f80ca3ee5018ce1c21 Mon Sep 17 00:00:00 2001 From: Stanislav Ulegin Date: Tue, 31 Mar 2026 18:36:20 +0300 Subject: [PATCH] release(tach-typography): v0.3.0 --- packages/tach-typography/README.md | 14 ++ .../dist/angular/angular/index.d.ts | 8 +- .../dist/angular/angular/index.d.ts.map | 2 +- .../dist/angular/angular/index.js | 119 +++++++++++-- .../dist/angular/angular/index.js.map | 2 +- .../dist/angular/core/index.d.ts | 1 + .../dist/angular/core/index.d.ts.map | 2 +- .../dist/angular/core/index.js | 1 + .../dist/angular/core/index.js.map | 2 +- .../dist/angular/core/markdown.d.ts | 2 + .../dist/angular/core/markdown.d.ts.map | 1 + .../dist/angular/core/markdown.js | 47 ++++++ .../dist/angular/core/markdown.js.map | 1 + packages/tach-typography/dist/core/index.cjs | 42 +++++ .../tach-typography/dist/core/index.cjs.map | 2 +- .../tach-typography/dist/core/index.d.cts | 4 +- packages/tach-typography/dist/core/index.d.ts | 4 +- packages/tach-typography/dist/core/index.js | 43 ++++- .../tach-typography/dist/core/index.js.map | 2 +- packages/tach-typography/dist/react/index.cjs | 85 ++++++++-- .../tach-typography/dist/react/index.cjs.map | 2 +- .../tach-typography/dist/react/index.d.cts | 2 + .../tach-typography/dist/react/index.d.ts | 2 + packages/tach-typography/dist/react/index.js | 85 ++++++++-- .../tach-typography/dist/react/index.js.map | 2 +- packages/tach-typography/dist/styles.css | 11 ++ packages/tach-typography/package.json | 2 +- packages/tach-typography/src/angular/index.ts | 65 +++++++- .../tach-typography/src/core/index.test.ts | 25 +++ packages/tach-typography/src/core/index.ts | 1 + packages/tach-typography/src/core/markdown.ts | 65 ++++++++ packages/tach-typography/src/react/index.tsx | 56 +++++-- .../TachTypography.Markdown.stories.tsx | 157 ++++++++++++++++++ .../TachTypography.Reference.stories.tsx | 14 ++ .../src/styles/tach-typography.css | 11 ++ 35 files changed, 799 insertions(+), 85 deletions(-) create mode 100644 packages/tach-typography/dist/angular/core/markdown.d.ts create mode 100644 packages/tach-typography/dist/angular/core/markdown.d.ts.map create mode 100644 packages/tach-typography/dist/angular/core/markdown.js create mode 100644 packages/tach-typography/dist/angular/core/markdown.js.map create mode 100644 packages/tach-typography/src/core/markdown.ts create mode 100644 packages/tach-typography/src/stories/TachTypography.Markdown.stories.tsx diff --git a/packages/tach-typography/README.md b/packages/tach-typography/README.md index f46b462..cd5b4ab 100644 --- a/packages/tach-typography/README.md +++ b/packages/tach-typography/README.md @@ -58,6 +58,14 @@ export const Example = () => ( ); ``` +Markdown as a prop (keeps existing API): + +```tsx + + **Bold** _italic_ [Docs](https://example.com) + +``` + ## Angular usage (NG-ZORRO) ```ts @@ -92,6 +100,12 @@ import { TachTypographyComponent } from "@hublib-web/tach-typography/angular"; export class ExampleComponent {} ``` +Markdown in Angular: + +```html + +``` + ## Storybook (dev/design system) Run from repository root: diff --git a/packages/tach-typography/dist/angular/angular/index.d.ts b/packages/tach-typography/dist/angular/angular/index.d.ts index 551f7b5..88170ba 100644 --- a/packages/tach-typography/dist/angular/angular/index.d.ts +++ b/packages/tach-typography/dist/angular/angular/index.d.ts @@ -56,21 +56,25 @@ export declare class TachTypographyHostPropsDirective implements OnChanges { static ɵfac: i0.ɵɵFactoryDeclaration; static ɵdir: i0.ɵɵDirectiveDeclaration; } -export declare class TachTypographyComponent { +export declare class TachTypographyComponent implements OnChanges { hostTag: TachTypographyHostTag; variant: TypographyVariant; color: TypographyColor; weight: TypographyWeight; clickable: boolean; + markdownEnabled: boolean; + markdown: string | undefined; className: string | undefined; ellipsis: EllipsisOptions | undefined; nzProps: TachTypographyNzProps | undefined; hostProps: TachTypographyHostProps | undefined; preserveStyle: Record | undefined; readonly tachClick: EventEmitter; + renderedMarkdown: string; + ngOnChanges(_changes: SimpleChanges): void; handleClick(event: MouseEvent): void; static ɵfac: i0.ɵɵFactoryDeclaration; - static ɵcmp: i0.ɵɵComponentDeclaration; + static ɵcmp: i0.ɵɵComponentDeclaration; } export declare class TachTypographyNzModule { static ɵfac: i0.ɵɵFactoryDeclaration; diff --git a/packages/tach-typography/dist/angular/angular/index.d.ts.map b/packages/tach-typography/dist/angular/angular/index.d.ts.map index 60fd33e..4396fac 100644 --- a/packages/tach-typography/dist/angular/angular/index.d.ts.map +++ b/packages/tach-typography/dist/angular/angular/index.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/angular/index.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/angular/index.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/tach-typography/dist/angular/angular/index.js b/packages/tach-typography/dist/angular/angular/index.js index a94cd8c..e3cd48a 100644 --- a/packages/tach-typography/dist/angular/angular/index.js +++ b/packages/tach-typography/dist/angular/angular/index.js @@ -1,7 +1,7 @@ -import { NgStyle, NgSwitch, NgSwitchCase, NgSwitchDefault } from "@angular/common"; +import { NgIf, NgStyle, NgSwitch, NgSwitchCase, NgSwitchDefault } from "@angular/common"; import { ChangeDetectionStrategy, Component, Directive, EventEmitter, inject, Input, NgModule, Output, } from "@angular/core"; import { NzTypographyComponent, NzTypographyModule } from "ng-zorro-antd/typography"; -import { tachTypographyClassList, tachTypographyClassName, tachTypographyEllipsisStyle, } from "../core"; +import { tachTypographyClassList, tachTypographyClassName, tachTypographyEllipsisStyle, tachTypographyMarkdownToHtml, } from "../core"; import * as i0 from "@angular/core"; import * as i1 from "ng-zorro-antd/typography"; const camelToKebab = (value) => value.replace(/[A-Z]/g, match => `-${match.toLowerCase()}`); @@ -233,17 +233,25 @@ export class TachTypographyComponent { color = "primary"; weight = "normal"; clickable = false; + markdownEnabled = false; + markdown; className; ellipsis; nzProps; hostProps; preserveStyle; tachClick = new EventEmitter(); + renderedMarkdown = ""; + ngOnChanges(_changes) { + this.renderedMarkdown = this.markdownEnabled + ? tachTypographyMarkdownToHtml(this.markdown ?? "") + : ""; + } handleClick(event) { this.tachClick.emit(event); } static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: TachTypographyComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); - static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.18", type: TachTypographyComponent, isStandalone: true, selector: "tach-typography", inputs: { hostTag: ["as", "hostTag"], variant: "variant", color: "color", weight: "weight", clickable: "clickable", className: "className", ellipsis: "ellipsis", nzProps: "nzProps", hostProps: "hostProps", preserveStyle: "preserveStyle" }, outputs: { tachClick: "tachClick" }, ngImport: i0, template: ` + static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.18", type: TachTypographyComponent, isStandalone: true, selector: "tach-typography", inputs: { hostTag: ["as", "hostTag"], variant: "variant", color: "color", weight: "weight", clickable: "clickable", markdownEnabled: "markdownEnabled", markdown: "markdown", className: "className", ellipsis: "ellipsis", nzProps: "nzProps", hostProps: "hostProps", preserveStyle: "preserveStyle" }, outputs: { tachClick: "tachClick" }, usesOnChanges: true, ngImport: i0, template: `

- + + + + + +

- + + + + + +

- + + + + + +

- + + + + + +

- + + + + + +

- + + + + + +

- + + + + + +
- `, isInline: true, dependencies: [{ kind: "ngmodule", type: NzTypographyModule }, { kind: "component", type: i1.NzTypographyComponent, selector: " nz-typography, [nz-typography], p[nz-paragraph], span[nz-text], h1[nz-title], h2[nz-title], h3[nz-title], h4[nz-title] ", inputs: ["nzCopyable", "nzEditable", "nzDisabled", "nzExpandable", "nzEllipsis", "nzCopyTooltips", "nzCopyIcons", "nzEditTooltip", "nzEditIcon", "nzContent", "nzEllipsisRows", "nzType", "nzCopyText", "nzSuffix"], outputs: ["nzContentChange", "nzCopy", "nzExpandChange", "nzOnEllipsis"], exportAs: ["nzTypography"] }, { kind: "directive", type: TachTypographyDirective, selector: "[tachTypography]", inputs: ["tachTypography", "tachTypographyVariant", "tachTypographyColor", "tachTypographyWeight", "tachTypographyClickable", "tachTypographyClassName", "tachTypographyEllipsis"] }, { kind: "directive", type: TachTypographyNzPropsDirective, selector: "[tachTypographyNzProps]", inputs: ["tachTypographyNzProps"] }, { kind: "directive", type: TachTypographyHostPropsDirective, selector: "[tachTypographyHostProps]", inputs: ["tachTypographyHostProps"] }, { kind: "directive", type: NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); + `, isInline: true, dependencies: [{ kind: "ngmodule", type: NzTypographyModule }, { kind: "component", type: i1.NzTypographyComponent, selector: " nz-typography, [nz-typography], p[nz-paragraph], span[nz-text], h1[nz-title], h2[nz-title], h3[nz-title], h4[nz-title] ", inputs: ["nzCopyable", "nzEditable", "nzDisabled", "nzExpandable", "nzEllipsis", "nzCopyTooltips", "nzCopyIcons", "nzEditTooltip", "nzEditIcon", "nzContent", "nzEllipsisRows", "nzType", "nzCopyText", "nzSuffix"], outputs: ["nzContentChange", "nzCopy", "nzExpandChange", "nzOnEllipsis"], exportAs: ["nzTypography"] }, { kind: "directive", type: TachTypographyDirective, selector: "[tachTypography]", inputs: ["tachTypography", "tachTypographyVariant", "tachTypographyColor", "tachTypographyWeight", "tachTypographyClickable", "tachTypographyClassName", "tachTypographyEllipsis"] }, { kind: "directive", type: TachTypographyNzPropsDirective, selector: "[tachTypographyNzProps]", inputs: ["tachTypographyNzProps"] }, { kind: "directive", type: TachTypographyHostPropsDirective, selector: "[tachTypographyHostProps]", inputs: ["tachTypographyHostProps"] }, { kind: "directive", type: NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: TachTypographyComponent, decorators: [{ type: Component, @@ -373,6 +416,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImpo NgSwitch, NgSwitchCase, NgSwitchDefault, + NgIf, NgStyle, ], changeDetection: ChangeDetectionStrategy.OnPush, @@ -392,7 +436,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImpo [ngStyle]="preserveStyle" (click)="handleClick($event)" > - + + + + + +

- + + + + + +

- + + + + + +

- + + + + + +

- + + + + + +

- + + + + + +

- + + + + + + `, @@ -504,6 +583,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImpo type: Input }], clickable: [{ type: Input + }], markdownEnabled: [{ + type: Input + }], markdown: [{ + type: Input }], className: [{ type: Input }], ellipsis: [{ diff --git a/packages/tach-typography/dist/angular/angular/index.js.map b/packages/tach-typography/dist/angular/angular/index.js.map index cb6b4f8..0ac80b4 100644 --- a/packages/tach-typography/dist/angular/angular/index.js.map +++ b/packages/tach-typography/dist/angular/angular/index.js.map @@ -1 +1 @@ -{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/angular/index.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/angular/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AACzF,OAAO,EACL,uBAAuB,EACvB,SAAS,EACT,SAAS,EAET,YAAY,EACZ,MAAM,EACN,KAAK,EACL,QAAQ,EAER,MAAM,GAGP,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAErF,OAAO,EACL,uBAAuB,EACvB,uBAAuB,EACvB,2BAA2B,EAC3B,4BAA4B,GAO7B,MAAM,SAAS,CAAC;;;AAoBjB,MAAM,YAAY,GAAG,CAAC,KAAa,EAAU,EAAE,CAC7C,KAAK,CAAC,OAAO,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE,CAAC,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;AAE9D,MAAM,aAAa,GAAG,CAAC,QAAgB,EAAU,EAAE;IACjD,IAAI,QAAQ,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAClC,OAAO,WAAW,YAAY,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACtD,CAAC;IAED,OAAO,YAAY,CAAC,QAAQ,CAAC,CAAC;AAChC,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,8BAA8B,GAAG,CAC5C,UAAuC,EAAE,EACjC,EAAE;IACV,OAAO,uBAAuB,CAAC,OAAO,CAAC,CAAC;AAC1C,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,8BAA8B,GAAG,CAC5C,UAAuC,EAAE,EAC/B,EAAE;IACZ,OAAO,uBAAuB,CAAC,OAAO,CAAC,CAAC;AAC1C,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,2BAA2B,GAAG,CACzC,QAA0B,EAC1B,gBAAiD,EAAE,EAClB,EAAE;IACnC,MAAM,aAAa,GAAG,2BAA2B,CAAC,QAAQ,CAAC,CAAC;IAE5D,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,OAAO,aAAa,CAAC;IACvB,CAAC;IAED,OAAO;QACL,GAAG,aAAa;QAChB,GAAG,aAAa;KACjB,CAAC;AACJ,CAAC,CAAC;AAMF,MAAM,OAAO,uBAAuB;IAaf;IACA;IAbV,cAAc,CAAqC;IACnD,qBAAqB,GAAsB,MAAM,CAAC;IAClD,mBAAmB,GAAoB,SAAS,CAAC;IACjD,oBAAoB,GAAqB,QAAQ,CAAC;IAClD,uBAAuB,GAAG,KAAK,CAAC;IAChC,uBAAuB,CAAqB;IAC5C,sBAAsB,CAA8B;IAE5C,cAAc,GAAG,IAAI,GAAG,EAAU,CAAC;IACnC,sBAAsB,GAAG,IAAI,GAAG,EAAU,CAAC;IAE5D,YACmB,UAAmC,EACnC,QAAmB;QADnB,eAAU,GAAV,UAAU,CAAyB;QACnC,aAAQ,GAAR,QAAQ,CAAW;IACnC,CAAC;IAEJ,WAAW,CAAC,QAAuB;QACjC,IAAI,CAAC,WAAW,EAAE,CAAC;QACnB,IAAI,CAAC,kBAAkB,EAAE,CAAC;IAC5B,CAAC;IAEO,WAAW;QACjB,MAAM,aAAa,GAAG,uBAAuB,CAAC;YAC5C,OAAO,EAAE,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,qBAAqB;YAC1D,KAAK,EAAE,IAAI,CAAC,mBAAmB;YAC/B,MAAM,EAAE,IAAI,CAAC,oBAAoB;YACjC,SAAS,EAAE,IAAI,CAAC,uBAAuB;YACvC,SAAS,EAAE,IAAI,CAAC,uBAAuB;SACxC,CAAC,CAAC;QAEH,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,aAAa,CAAC,CAAC;QAEvC,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YAC5C,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;gBAC5B,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE,SAAS,CAAC,CAAC;YACtE,CAAC;QACH,CAAC;QAED,KAAK,MAAM,SAAS,IAAI,OAAO,EAAE,CAAC;YAChC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE,SAAS,CAAC,CAAC;QACnE,CAAC;QAED,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,CAAC;QAC5B,KAAK,MAAM,SAAS,IAAI,OAAO,EAAE,CAAC;YAChC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACrC,CAAC;IACH,CAAC;IAEO,kBAAkB;QACxB,MAAM,UAAU,GAAG,2BAA2B,CAAC,IAAI,CAAC,sBAAsB,CAAC,IAAI,EAAE,CAAC;QAClF,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;QAEvD,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,sBAAsB,EAAE,CAAC;YACnD,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACjC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC;YACpF,CAAC;QACH,CAAC;QAED,KAAK,MAAM,CAAC,QAAQ,EAAE,UAAU,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;YAChE,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE,aAAa,CAAC,QAAQ,CAAC,EAAE,UAAU,CAAC,CAAC;QAC7F,CAAC;QAED,IAAI,CAAC,sBAAsB,CAAC,KAAK,EAAE,CAAC;QACpC,KAAK,MAAM,QAAQ,IAAI,aAAa,EAAE,CAAC;YACrC,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC5C,CAAC;IACH,CAAC;wGAnEU,uBAAuB;4FAAvB,uBAAuB;;4FAAvB,uBAAuB;kBAJnC,SAAS;mBAAC;oBACT,QAAQ,EAAE,kBAAkB;oBAC5B,UAAU,EAAE,IAAI;iBACjB;;sBAEE,KAAK;;sBACL,KAAK;;sBACL,KAAK;;sBACL,KAAK;;sBACL,KAAK;;sBACL,KAAK;;sBACL,KAAK;;AAmER,MAAM,OAAO,8BAA8B;IAChC,qBAAqB,CAA2C;IAExD,aAAa,GAAG,IAAI,GAAG,EAAU,CAAC;IAClC,YAAY,GAAG,MAAM,CAAC,qBAAqB,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;IAE9F,WAAW;QACT,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;YACvB,OAAO;QACT,CAAC;QAED,MAAM,YAAY,GAAG,IAAI,CAAC,YAAkD,CAAC;QAC7E,MAAM,SAAS,GAAG,IAAI,CAAC,qBAAqB,IAAI,EAAE,CAAC;QACnD,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAU,CAAC;QAEnC,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;YACrD,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC1B,SAAS;YACX,CAAC;YAED,YAAY,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;YAC1B,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACpB,CAAC;QAED,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACrC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;gBACvB,YAAY,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC;YAChC,CAAC;QACH,CAAC;QAED,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;QAC3B,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;YAC3B,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC;wGAlCU,8BAA8B;4FAA9B,8BAA8B;;4FAA9B,8BAA8B;kBAJ1C,SAAS;mBAAC;oBACT,QAAQ,EAAE,yBAAyB;oBACnC,UAAU,EAAE,IAAI;iBACjB;;sBAEE,KAAK;;AAwCR,MAAM,OAAO,gCAAgC;IAMxB;IACA;IANV,uBAAuB,CAA6C;IAE5D,gBAAgB,GAAG,IAAI,GAAG,EAA2B,CAAC;IAEvE,YACmB,UAAmC,EACnC,QAAmB;QADnB,eAAU,GAAV,UAAU,CAAyB;QACnC,aAAQ,GAAR,QAAQ,CAAW;IACnC,CAAC;IAEJ,WAAW;QACT,MAAM,SAAS,GAAG,IAAI,CAAC,uBAAuB,IAAI,EAAE,CAAC;QACrD,MAAM,gBAAgB,GAAG,IAAI,GAAG,EAA2B,CAAC;QAE5D,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;YACrD,IAAI,GAAG,KAAK,OAAO,IAAI,GAAG,KAAK,WAAW,IAAI,GAAG,KAAK,OAAO,EAAE,CAAC;gBAC9D,SAAS;YACX,CAAC;YAED,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;gBAC1C,SAAS;YACX,CAAC;YAED,MAAM,WAAW,GAAG,IAAI,CAAC,sBAAsB,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;YAC5D,IAAI,WAAW,EAAE,CAAC;gBAChB,IAAI,OAAO,KAAK,KAAK,SAAS,EAAE,CAAC;oBAC/B,IAAI,KAAK,EAAE,CAAC;wBACV,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;oBACrE,CAAC;yBAAM,CAAC;wBACN,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE,GAAG,CAAC,CAAC;oBACpE,CAAC;gBACH,CAAC;qBAAM,CAAC;oBACN,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;gBAChF,CAAC;gBACD,gBAAgB,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;gBAClC,SAAS;YACX,CAAC;YAED,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;YACrE,gBAAgB,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QACpC,CAAC;QAED,KAAK,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,EAAE,CAAC;YAC1D,IAAI,gBAAgB,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC9B,SAAS;YACX,CAAC;YAED,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;gBACpB,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE,GAAG,CAAC,CAAC;YACpE,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE,GAAG,EAAE,SAAS,CAAC,CAAC;YAC3E,CAAC;QACH,CAAC;QAED,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,CAAC;QAC9B,KAAK,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,gBAAgB,CAAC,OAAO,EAAE,EAAE,CAAC;YACrD,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QACvC,CAAC;IACH,CAAC;IAEO,sBAAsB,CAAC,GAAW,EAAE,KAAc;QACxD,IAAI,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YACvD,OAAO,IAAI,CAAC;QACd,CAAC;QAED,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,SAAS,EAAE,CAAC;YACzF,OAAO,CAAC,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC;QACzC,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;IAEO,oBAAoB,CAAC,GAAW;QACtC,OAAO,GAAG,IAAI,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC;IAC9C,CAAC;wGA1EU,gCAAgC;4FAAhC,gCAAgC;;4FAAhC,gCAAgC;kBAJ5C,SAAS;mBAAC;oBACT,QAAQ,EAAE,2BAA2B;oBACrC,UAAU,EAAE,IAAI;iBACjB;;sBAEE,KAAK;;AAmPR,MAAM,OAAO,uBAAuB;IACrB,OAAO,GAA0B,MAAM,CAAC;IAC5C,OAAO,GAAsB,MAAM,CAAC;IACpC,KAAK,GAAoB,SAAS,CAAC;IACnC,MAAM,GAAqB,QAAQ,CAAC;IACpC,SAAS,GAAG,KAAK,CAAC;IAClB,eAAe,GAAG,KAAK,CAAC;IACxB,QAAQ,CAAqB;IAC7B,SAAS,CAAqB;IAC9B,QAAQ,CAA8B;IACtC,OAAO,CAAoC;IAC3C,SAAS,CAAsC;IAC/C,aAAa,CAA8C;IAEjD,SAAS,GAAG,IAAI,YAAY,EAAc,CAAC;IAE9D,gBAAgB,GAAG,EAAE,CAAC;IAEtB,WAAW,CAAC,QAAuB;QACjC,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,eAAe;YAC1C,CAAC,CAAC,4BAA4B,CAAC,IAAI,CAAC,QAAQ,IAAI,EAAE,CAAC;YACnD,CAAC,CAAC,EAAE,CAAC;IACT,CAAC;IAED,WAAW,CAAC,KAAiB;QAC3B,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC7B,CAAC;wGA1BU,uBAAuB;4FAAvB,uBAAuB,+aAxJxB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsJT,2DAjKC,kBAAkB,6hBApMT,uBAAuB,iPA0EvB,8BAA8B,uGAyC9B,gCAAgC,2GAqFzC,QAAQ,6EACR,YAAY,qFACZ,eAAe,8DACf,IAAI,6FACJ,OAAO;;4FA2JE,uBAAuB;kBAvKnC,SAAS;mBAAC;oBACT,QAAQ,EAAE,iBAAiB;oBAC3B,UAAU,EAAE,IAAI;oBAChB,OAAO,EAAE;wBACP,kBAAkB;wBAClB,uBAAuB;wBACvB,8BAA8B;wBAC9B,gCAAgC;wBAChC,QAAQ;wBACR,YAAY;wBACZ,eAAe;wBACf,IAAI;wBACJ,OAAO;qBACR;oBACD,eAAe,EAAE,uBAAuB,CAAC,MAAM;oBAC/C,QAAQ,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsJT;iBACF;;sBAEE,KAAK;uBAAC,IAAI;;sBACV,KAAK;;sBACL,KAAK;;sBACL,KAAK;;sBACL,KAAK;;sBACL,KAAK;;sBACL,KAAK;;sBACL,KAAK;;sBACL,KAAK;;sBACL,KAAK;;sBACL,KAAK;;sBACL,KAAK;;sBAEL,MAAM;;AA+BT,MAAM,OAAO,sBAAsB;wGAAtB,sBAAsB;yGAAtB,sBAAsB,YAd/B,kBAAkB,EAtYT,uBAAuB,EA0EvB,8BAA8B,EAyC9B,gCAAgC,EAoPhC,uBAAuB,aAsChC,kBAAkB,EA7YT,uBAAuB,EA0EvB,8BAA8B,EAyC9B,gCAAgC,EAoPhC,uBAAuB;yGA6CvB,sBAAsB,YAd/B,kBAAkB;YAIlB,uBAAuB,EAGvB,kBAAkB;;4FAOT,sBAAsB;kBAhBlC,QAAQ;mBAAC;oBACR,OAAO,EAAE;wBACP,kBAAkB;wBAClB,uBAAuB;wBACvB,8BAA8B;wBAC9B,gCAAgC;wBAChC,uBAAuB;qBACxB;oBACD,OAAO,EAAE;wBACP,kBAAkB;wBAClB,uBAAuB;wBACvB,8BAA8B;wBAC9B,gCAAgC;wBAChC,uBAAuB;qBACxB;iBACF"} \ No newline at end of file diff --git a/packages/tach-typography/dist/angular/core/index.d.ts b/packages/tach-typography/dist/angular/core/index.d.ts index 06d561f..3db433f 100644 --- a/packages/tach-typography/dist/angular/core/index.d.ts +++ b/packages/tach-typography/dist/angular/core/index.d.ts @@ -1,4 +1,5 @@ export * from "./types"; export * from "./classnames"; export * from "./ellipsis"; +export * from "./markdown"; //# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/packages/tach-typography/dist/angular/core/index.d.ts.map b/packages/tach-typography/dist/angular/core/index.d.ts.map index e346c0b..4596831 100644 --- a/packages/tach-typography/dist/angular/core/index.d.ts.map +++ b/packages/tach-typography/dist/angular/core/index.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC"} \ No newline at end of file +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC"} \ No newline at end of file diff --git a/packages/tach-typography/dist/angular/core/index.js b/packages/tach-typography/dist/angular/core/index.js index e8616ab..ea26f95 100644 --- a/packages/tach-typography/dist/angular/core/index.js +++ b/packages/tach-typography/dist/angular/core/index.js @@ -1,4 +1,5 @@ export * from "./types"; export * from "./classnames"; export * from "./ellipsis"; +export * from "./markdown"; //# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/packages/tach-typography/dist/angular/core/index.js.map b/packages/tach-typography/dist/angular/core/index.js.map index f56fd47..ac10778 100644 --- a/packages/tach-typography/dist/angular/core/index.js.map +++ b/packages/tach-typography/dist/angular/core/index.js.map @@ -1 +1 @@ -{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC"} \ No newline at end of file +{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC"} \ No newline at end of file diff --git a/packages/tach-typography/dist/angular/core/markdown.d.ts b/packages/tach-typography/dist/angular/core/markdown.d.ts new file mode 100644 index 0000000..cde1664 --- /dev/null +++ b/packages/tach-typography/dist/angular/core/markdown.d.ts @@ -0,0 +1,2 @@ +export declare const tachTypographyMarkdownToHtml: (markdown: string) => string; +//# sourceMappingURL=markdown.d.ts.map \ No newline at end of file diff --git a/packages/tach-typography/dist/angular/core/markdown.d.ts.map b/packages/tach-typography/dist/angular/core/markdown.d.ts.map new file mode 100644 index 0000000..a60adfe --- /dev/null +++ b/packages/tach-typography/dist/angular/core/markdown.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"markdown.d.ts","sourceRoot":"","sources":["../../../src/core/markdown.ts"],"names":[],"mappings":"AAuBA,eAAO,MAAM,4BAA4B,GAAI,UAAU,MAAM,KAAG,MAyC/D,CAAC"} \ No newline at end of file diff --git a/packages/tach-typography/dist/angular/core/markdown.js b/packages/tach-typography/dist/angular/core/markdown.js new file mode 100644 index 0000000..60494ad --- /dev/null +++ b/packages/tach-typography/dist/angular/core/markdown.js @@ -0,0 +1,47 @@ +const TOKEN_PREFIX = "TACHMDTOKEN"; +const SAFE_HREF_PATTERN = /^(https?:|mailto:|tel:|\/|#)/i; +const escapeHtml = (value) => value + .replace(/&/g, "&") + .replace(//g, ">") + .replace(/"/g, """) + .replace(/'/g, "'"); +const normalizeMarkdown = (value) => value.replace(/\r\n?/g, "\n"); +const sanitizeHref = (value) => { + const href = value.trim(); + if (!href || !SAFE_HREF_PATTERN.test(href)) { + return null; + } + return href; +}; +export const tachTypographyMarkdownToHtml = (markdown) => { + const source = normalizeMarkdown(markdown); + const tokenMap = 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; +}; +//# sourceMappingURL=markdown.js.map \ No newline at end of file diff --git a/packages/tach-typography/dist/angular/core/markdown.js.map b/packages/tach-typography/dist/angular/core/markdown.js.map new file mode 100644 index 0000000..a430b43 --- /dev/null +++ b/packages/tach-typography/dist/angular/core/markdown.js.map @@ -0,0 +1 @@ +{"version":3,"file":"markdown.js","sourceRoot":"","sources":["../../../src/core/markdown.ts"],"names":[],"mappings":"AAAA,MAAM,YAAY,GAAG,aAAa,CAAC;AACnC,MAAM,iBAAiB,GAAG,+BAA+B,CAAC;AAE1D,MAAM,UAAU,GAAG,CAAC,KAAa,EAAU,EAAE,CAC3C,KAAK;KACF,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC;KACtB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;KACrB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;KACrB,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC;KACvB,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AAE5B,MAAM,iBAAiB,GAAG,CAAC,KAAa,EAAU,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;AAEnF,MAAM,YAAY,GAAG,CAAC,KAAa,EAAiB,EAAE;IACpD,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAE1B,IAAI,CAAC,IAAI,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAC3C,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,4BAA4B,GAAG,CAAC,QAAgB,EAAU,EAAE;IACvE,MAAM,MAAM,GAAG,iBAAiB,CAAC,QAAQ,CAAC,CAAC;IAC3C,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC3C,IAAI,OAAO,GAAG,CAAC,CAAC;IAEhB,MAAM,SAAS,GAAG,MAAM;SACrB,OAAO,CAAC,cAAc,EAAE,CAAC,MAAM,EAAE,IAAY,EAAE,EAAE;QAChD,MAAM,KAAK,GAAG,GAAG,YAAY,GAAG,OAAO,EAAE,EAAE,CAAC;QAC5C,QAAQ,CAAC,GAAG,CACV,KAAK,EACL,0CAA0C,UAAU,CAAC,IAAI,CAAC,SAAS,CACpE,CAAC;QACF,OAAO,KAAK,CAAC;IACf,CAAC,CAAC;SACD,OAAO,CAAC,8BAA8B,EAAE,CAAC,MAAM,EAAE,KAAa,EAAE,OAAe,EAAE,EAAE;QAClF,MAAM,KAAK,GAAG,GAAG,YAAY,GAAG,OAAO,EAAE,EAAE,CAAC;QAC5C,MAAM,IAAI,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;QAEnC,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC;YACvC,OAAO,KAAK,CAAC;QACf,CAAC;QAED,QAAQ,CAAC,GAAG,CACV,KAAK,EACL,6CAA6C,UAAU,CAAC,IAAI,CAAC,+CAA+C,UAAU,CAAC,KAAK,CAAC,MAAM,CACpI,CAAC;QACF,OAAO,KAAK,CAAC;IACf,CAAC,CAAC,CAAC;IAEL,IAAI,IAAI,GAAG,UAAU,CAAC,SAAS,CAAC;SAC7B,OAAO,CAAC,oBAAoB,EAAE,qBAAqB,CAAC;SACpD,OAAO,CAAC,gBAAgB,EAAE,qBAAqB,CAAC;SAChD,OAAO,CAAC,gBAAgB,EAAE,aAAa,CAAC;SACxC,OAAO,CAAC,cAAc,EAAE,aAAa,CAAC;SACtC,OAAO,CAAC,gBAAgB,EAAE,eAAe,CAAC;SAC1C,OAAO,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;IAE5B,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,GAAG,YAAY,MAAM,EAAE,GAAG,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,CAAC;IAEnG,OAAO,IAAI,CAAC;AACd,CAAC,CAAC"} \ No newline at end of file diff --git a/packages/tach-typography/dist/core/index.cjs b/packages/tach-typography/dist/core/index.cjs index 7a4ff5b..15e4417 100644 --- a/packages/tach-typography/dist/core/index.cjs +++ b/packages/tach-typography/dist/core/index.cjs @@ -78,10 +78,52 @@ var tachTypographyEllipsisStyle = (ellipsis) => { }; }; +// 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; +}; + exports.TYPOGRAPHY_COLORS = TYPOGRAPHY_COLORS; exports.TYPOGRAPHY_VARIANTS = TYPOGRAPHY_VARIANTS; exports.tachTypographyClassList = tachTypographyClassList; exports.tachTypographyClassName = tachTypographyClassName; exports.tachTypographyEllipsisStyle = tachTypographyEllipsisStyle; +exports.tachTypographyMarkdownToHtml = tachTypographyMarkdownToHtml; //# sourceMappingURL=index.cjs.map //# sourceMappingURL=index.cjs.map \ No newline at end of file diff --git a/packages/tach-typography/dist/core/index.cjs.map b/packages/tach-typography/dist/core/index.cjs.map index 034429a..b3e1113 100644 --- a/packages/tach-typography/dist/core/index.cjs.map +++ b/packages/tach-typography/dist/core/index.cjs.map @@ -1 +1 @@ -{"version":3,"sources":["../../src/core/types.ts","../../src/core/classnames.ts","../../src/core/ellipsis.ts"],"names":[],"mappings":";;;AAAO,IAAM,mBAAA,GAAsB;AAAA,EACjC,YAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,UAAA;AAAA,EACA,MAAA;AAAA,EACA,QAAA;AAAA,EACA,aAAA;AAAA,EACA,mBAAA;AAAA,EACA,UAAA;AAAA,EACA,SAAA;AAAA,EACA,UAAA;AAAA,EACA,UAAA;AAAA,EACA,UAAA;AAAA,EACA,cAAA;AAAA,EACA,eAAA;AAAA,EACA,eAAA;AAAA,EACA,gBAAA;AAAA,EACA,gBAAA;AAAA,EACA,gBAAA;AAAA,EACA,gBAAA;AAAA,EACA,eAAA;AAAA,EACA,kBAAA;AAAA,EACA;AACF;AAEO,IAAM,iBAAA,GAAoB;AAAA,EAC/B,SAAA;AAAA,EACA,WAAA;AAAA,EACA,UAAA;AAAA,EACA,YAAA;AAAA,EACA,MAAA;AAAA,EACA,OAAA;AAAA,EACA,MAAA;AAAA,EACA,OAAA;AAAA,EACA,SAAA;AAAA,EACA;AACF;;;ACpCA,IAAM,UAAA,GAAa,iBAAA;AAEnB,IAAM,IAAA,GAAO,IAAI,KAAA,KACf,KAAA,CAAM,OAAO,OAAO,CAAA,CAAE,KAAK,GAAG,CAAA;AAEzB,IAAM,0BAA0B,CAAC;AAAA,EACtC,OAAA,GAAU,MAAA;AAAA,EACV,KAAA,GAAQ,SAAA;AAAA,EACR,MAAA,GAAS,QAAA;AAAA,EACT,SAAA,GAAY,KAAA;AAAA,EACZ;AACF,CAAA,GAA4B,EAAC,KAAc;AACzC,EAAA,OAAO,IAAA;AAAA,IACL,UAAA;AAAA,IACA,CAAA,EAAG,UAAU,CAAA,EAAA,EAAK,OAAO,CAAA,CAAA;AAAA,IACzB,CAAA,EAAG,UAAU,CAAA,QAAA,EAAW,KAAK,CAAA,CAAA;AAAA,IAC7B,MAAA,KAAW,MAAA,IAAU,CAAA,EAAG,UAAU,CAAA,MAAA,CAAA;AAAA,IAClC,SAAA,IAAa,GAAG,UAAU,CAAA,SAAA,CAAA;AAAA,IAC1B;AAAA,GACF;AACF;AAEO,IAAM,uBAAA,GAA0B,CAAC,OAAA,GAAkC,EAAC,KAAgB;AACzF,EAAA,OAAO,wBAAwB,OAAO,CAAA,CACnC,MAAM,GAAG,CAAA,CACT,OAAO,OAAO,CAAA;AACnB;;;ACxBO,IAAM,2BAAA,GAA8B,CACzC,QAAA,KAC4B;AAC5B,EAAA,IAAI,CAAC,QAAA,EAAU;AACb,IAAA,OAAO,MAAA;AAAA,EACT;AAEA,EAAA,MAAM,OAAO,OAAO,QAAA,KAAa,QAAA,GAAW,QAAA,CAAS,QAAQ,CAAA,GAAI,CAAA;AAEjE,EAAA,OAAO;AAAA,IACL,QAAA,EAAU,QAAA;AAAA,IACV,YAAA,EAAc,UAAA;AAAA,IACd,OAAA,EAAS,aAAA;AAAA,IACT,eAAA,EAAiB,UAAA;AAAA,IACjB,eAAA,EAAiB;AAAA,GACnB;AACF","file":"index.cjs","sourcesContent":["export const TYPOGRAPHY_VARIANTS = [\n \"LargeTitle\",\n \"Title1\",\n \"Title2\",\n \"Title3\",\n \"Headline\",\n \"Body\",\n \"Inputs\",\n \"Subheadline\",\n \"FootnoteUnderline\",\n \"Footnote\",\n \"Caption\",\n \"Caption2\",\n \"AccentH1\",\n \"AccentH2\",\n \"AccentSubttl\",\n \"AccentSubttl2\",\n \"AccentCaption\",\n \"AccentCaption2\",\n \"AccentRegularM\",\n \"AccentRegularS\",\n \"AccentLargeTtl\",\n \"AppMediumBody\",\n \"AppMediumSubtext\",\n \"AppMediumSubtextUnderline\",\n] as const;\n\nexport const TYPOGRAPHY_COLORS = [\n \"primary\",\n \"secondary\",\n \"tertiary\",\n \"quaternary\",\n \"link\",\n \"white\",\n \"dark\",\n \"alert\",\n \"malahit\",\n \"attantion\",\n] as const;\n\nexport type TypographyVariant = (typeof TYPOGRAPHY_VARIANTS)[number];\nexport type TypographyColor = (typeof TYPOGRAPHY_COLORS)[number];\nexport type TypographyWeight = \"normal\" | \"bold\";\n\nexport interface TypographyClassOptions {\n variant?: TypographyVariant;\n color?: TypographyColor;\n weight?: TypographyWeight;\n clickable?: boolean;\n className?: string | undefined;\n}\n\nexport type EllipsisOptions =\n | boolean\n | {\n rows?: number;\n };\n\nexport interface TypographyRenderOptions extends TypographyClassOptions {\n ellipsis?: EllipsisOptions;\n}\n","import type { TypographyClassOptions } from \"./types\";\n\nconst BASE_CLASS = \"tach-typography\";\n\nconst join = (...parts: Array): string =>\n parts.filter(Boolean).join(\" \");\n\nexport const tachTypographyClassName = ({\n variant = \"Body\",\n color = \"primary\",\n weight = \"normal\",\n clickable = false,\n className,\n}: TypographyClassOptions = {}): string => {\n return join(\n BASE_CLASS,\n `${BASE_CLASS}--${variant}`,\n `${BASE_CLASS}--color-${color}`,\n weight === \"bold\" && `${BASE_CLASS}--bold`,\n clickable && `${BASE_CLASS}--pointer`,\n className,\n );\n};\n\nexport const tachTypographyClassList = (options: TypographyClassOptions = {}): string[] => {\n return tachTypographyClassName(options)\n .split(\" \")\n .filter(Boolean);\n};\n","import type { EllipsisOptions } from \"./types\";\n\ntype StyleRecord = Record;\n\nexport const tachTypographyEllipsisStyle = (\n ellipsis?: EllipsisOptions,\n): StyleRecord | undefined => {\n if (!ellipsis) {\n return undefined;\n }\n\n const rows = typeof ellipsis === \"object\" ? ellipsis.rows ?? 1 : 1;\n\n return {\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n display: \"-webkit-box\",\n WebkitBoxOrient: \"vertical\",\n WebkitLineClamp: rows,\n };\n};\n"]} \ No newline at end of file +{"version":3,"sources":["../../src/core/types.ts","../../src/core/classnames.ts","../../src/core/ellipsis.ts","../../src/core/markdown.ts"],"names":[],"mappings":"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","file":"index.cjs","sourcesContent":["export const TYPOGRAPHY_VARIANTS = [\n \"LargeTitle\",\n \"Title1\",\n \"Title2\",\n \"Title3\",\n \"Headline\",\n \"Body\",\n \"Inputs\",\n \"Subheadline\",\n \"FootnoteUnderline\",\n \"Footnote\",\n \"Caption\",\n \"Caption2\",\n \"AccentH1\",\n \"AccentH2\",\n \"AccentSubttl\",\n \"AccentSubttl2\",\n \"AccentCaption\",\n \"AccentCaption2\",\n \"AccentRegularM\",\n \"AccentRegularS\",\n \"AccentLargeTtl\",\n \"AppMediumBody\",\n \"AppMediumSubtext\",\n \"AppMediumSubtextUnderline\",\n] as const;\n\nexport const TYPOGRAPHY_COLORS = [\n \"primary\",\n \"secondary\",\n \"tertiary\",\n \"quaternary\",\n \"link\",\n \"white\",\n \"dark\",\n \"alert\",\n \"malahit\",\n \"attantion\",\n] as const;\n\nexport type TypographyVariant = (typeof TYPOGRAPHY_VARIANTS)[number];\nexport type TypographyColor = (typeof TYPOGRAPHY_COLORS)[number];\nexport type TypographyWeight = \"normal\" | \"bold\";\n\nexport interface TypographyClassOptions {\n variant?: TypographyVariant;\n color?: TypographyColor;\n weight?: TypographyWeight;\n clickable?: boolean;\n className?: string | undefined;\n}\n\nexport type EllipsisOptions =\n | boolean\n | {\n rows?: number;\n };\n\nexport interface TypographyRenderOptions extends TypographyClassOptions {\n ellipsis?: EllipsisOptions;\n}\n","import type { TypographyClassOptions } from \"./types\";\n\nconst BASE_CLASS = \"tach-typography\";\n\nconst join = (...parts: Array): string =>\n parts.filter(Boolean).join(\" \");\n\nexport const tachTypographyClassName = ({\n variant = \"Body\",\n color = \"primary\",\n weight = \"normal\",\n clickable = false,\n className,\n}: TypographyClassOptions = {}): string => {\n return join(\n BASE_CLASS,\n `${BASE_CLASS}--${variant}`,\n `${BASE_CLASS}--color-${color}`,\n weight === \"bold\" && `${BASE_CLASS}--bold`,\n clickable && `${BASE_CLASS}--pointer`,\n className,\n );\n};\n\nexport const tachTypographyClassList = (options: TypographyClassOptions = {}): string[] => {\n return tachTypographyClassName(options)\n .split(\" \")\n .filter(Boolean);\n};\n","import type { EllipsisOptions } from \"./types\";\n\ntype StyleRecord = Record;\n\nexport const tachTypographyEllipsisStyle = (\n ellipsis?: EllipsisOptions,\n): StyleRecord | undefined => {\n if (!ellipsis) {\n return undefined;\n }\n\n const rows = typeof ellipsis === \"object\" ? ellipsis.rows ?? 1 : 1;\n\n return {\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n display: \"-webkit-box\",\n WebkitBoxOrient: \"vertical\",\n WebkitLineClamp: rows,\n };\n};\n","const TOKEN_PREFIX = \"TACHMDTOKEN\";\nconst SAFE_HREF_PATTERN = /^(https?:|mailto:|tel:|\\/|#)/i;\n\nconst escapeHtml = (value: string): string =>\n value\n .replace(/&/g, \"&\")\n .replace(//g, \">\")\n .replace(/\"/g, \""\")\n .replace(/'/g, \"'\");\n\nconst normalizeMarkdown = (value: string): string => value.replace(/\\r\\n?/g, \"\\n\");\n\nconst sanitizeHref = (value: string): string | null => {\n const href = value.trim();\n\n if (!href || !SAFE_HREF_PATTERN.test(href)) {\n return null;\n }\n\n return href;\n};\n\nexport const tachTypographyMarkdownToHtml = (markdown: string): string => {\n const source = normalizeMarkdown(markdown);\n const tokenMap = new Map();\n let tokenId = 0;\n\n const tokenized = source\n .replace(/`([^`\\n]+)`/g, (_match, code: string) => {\n const token = `${TOKEN_PREFIX}${tokenId++}`;\n tokenMap.set(\n token,\n `${escapeHtml(code)}`,\n );\n return token;\n })\n .replace(/\\[([^\\]\\n]+)\\]\\(([^)\\n]+)\\)/g, (_match, label: string, hrefRaw: string) => {\n const token = `${TOKEN_PREFIX}${tokenId++}`;\n const href = sanitizeHref(hrefRaw);\n\n if (!href) {\n tokenMap.set(token, escapeHtml(label));\n return token;\n }\n\n tokenMap.set(\n token,\n `${escapeHtml(label)}`,\n );\n return token;\n });\n\n let html = escapeHtml(tokenized)\n .replace(/\\*\\*([^*\\n]+)\\*\\*/g, \"$1\")\n .replace(/__([^_\\n]+)__/g, \"$1\")\n .replace(/\\*([^*\\n]+)\\*/g, \"$1\")\n .replace(/_([^_\\n]+)_/g, \"$1\")\n .replace(/~~([^~\\n]+)~~/g, \"$1\")\n .replace(/\\n/g, \"
\");\n\n html = html.replace(new RegExp(`${TOKEN_PREFIX}\\\\d+`, \"g\"), token => tokenMap.get(token) || token);\n\n return html;\n};\n"]} \ No newline at end of file diff --git a/packages/tach-typography/dist/core/index.d.cts b/packages/tach-typography/dist/core/index.d.cts index 5ac3a7f..2fd02c2 100644 --- a/packages/tach-typography/dist/core/index.d.cts +++ b/packages/tach-typography/dist/core/index.d.cts @@ -7,4 +7,6 @@ declare const tachTypographyClassList: (options?: TypographyClassOptions) => str type StyleRecord = Record; declare const tachTypographyEllipsisStyle: (ellipsis?: EllipsisOptions) => StyleRecord | undefined; -export { EllipsisOptions, TypographyClassOptions, tachTypographyClassList, tachTypographyClassName, tachTypographyEllipsisStyle }; +declare const tachTypographyMarkdownToHtml: (markdown: string) => string; + +export { EllipsisOptions, TypographyClassOptions, tachTypographyClassList, tachTypographyClassName, tachTypographyEllipsisStyle, tachTypographyMarkdownToHtml }; diff --git a/packages/tach-typography/dist/core/index.d.ts b/packages/tach-typography/dist/core/index.d.ts index f3b311b..03dceee 100644 --- a/packages/tach-typography/dist/core/index.d.ts +++ b/packages/tach-typography/dist/core/index.d.ts @@ -7,4 +7,6 @@ declare const tachTypographyClassList: (options?: TypographyClassOptions) => str type StyleRecord = Record; declare const tachTypographyEllipsisStyle: (ellipsis?: EllipsisOptions) => StyleRecord | undefined; -export { EllipsisOptions, TypographyClassOptions, tachTypographyClassList, tachTypographyClassName, tachTypographyEllipsisStyle }; +declare const tachTypographyMarkdownToHtml: (markdown: string) => string; + +export { EllipsisOptions, TypographyClassOptions, tachTypographyClassList, tachTypographyClassName, tachTypographyEllipsisStyle, tachTypographyMarkdownToHtml }; diff --git a/packages/tach-typography/dist/core/index.js b/packages/tach-typography/dist/core/index.js index be35d87..4932376 100644 --- a/packages/tach-typography/dist/core/index.js +++ b/packages/tach-typography/dist/core/index.js @@ -76,6 +76,47 @@ var tachTypographyEllipsisStyle = (ellipsis) => { }; }; -export { TYPOGRAPHY_COLORS, TYPOGRAPHY_VARIANTS, tachTypographyClassList, tachTypographyClassName, tachTypographyEllipsisStyle }; +// 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; +}; + +export { TYPOGRAPHY_COLORS, TYPOGRAPHY_VARIANTS, tachTypographyClassList, tachTypographyClassName, tachTypographyEllipsisStyle, tachTypographyMarkdownToHtml }; //# sourceMappingURL=index.js.map //# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/packages/tach-typography/dist/core/index.js.map b/packages/tach-typography/dist/core/index.js.map index ad5a864..a8c9537 100644 --- a/packages/tach-typography/dist/core/index.js.map +++ b/packages/tach-typography/dist/core/index.js.map @@ -1 +1 @@ -{"version":3,"sources":["../../src/core/types.ts","../../src/core/classnames.ts","../../src/core/ellipsis.ts"],"names":[],"mappings":";AAAO,IAAM,mBAAA,GAAsB;AAAA,EACjC,YAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,UAAA;AAAA,EACA,MAAA;AAAA,EACA,QAAA;AAAA,EACA,aAAA;AAAA,EACA,mBAAA;AAAA,EACA,UAAA;AAAA,EACA,SAAA;AAAA,EACA,UAAA;AAAA,EACA,UAAA;AAAA,EACA,UAAA;AAAA,EACA,cAAA;AAAA,EACA,eAAA;AAAA,EACA,eAAA;AAAA,EACA,gBAAA;AAAA,EACA,gBAAA;AAAA,EACA,gBAAA;AAAA,EACA,gBAAA;AAAA,EACA,eAAA;AAAA,EACA,kBAAA;AAAA,EACA;AACF;AAEO,IAAM,iBAAA,GAAoB;AAAA,EAC/B,SAAA;AAAA,EACA,WAAA;AAAA,EACA,UAAA;AAAA,EACA,YAAA;AAAA,EACA,MAAA;AAAA,EACA,OAAA;AAAA,EACA,MAAA;AAAA,EACA,OAAA;AAAA,EACA,SAAA;AAAA,EACA;AACF;;;ACpCA,IAAM,UAAA,GAAa,iBAAA;AAEnB,IAAM,IAAA,GAAO,IAAI,KAAA,KACf,KAAA,CAAM,OAAO,OAAO,CAAA,CAAE,KAAK,GAAG,CAAA;AAEzB,IAAM,0BAA0B,CAAC;AAAA,EACtC,OAAA,GAAU,MAAA;AAAA,EACV,KAAA,GAAQ,SAAA;AAAA,EACR,MAAA,GAAS,QAAA;AAAA,EACT,SAAA,GAAY,KAAA;AAAA,EACZ;AACF,CAAA,GAA4B,EAAC,KAAc;AACzC,EAAA,OAAO,IAAA;AAAA,IACL,UAAA;AAAA,IACA,CAAA,EAAG,UAAU,CAAA,EAAA,EAAK,OAAO,CAAA,CAAA;AAAA,IACzB,CAAA,EAAG,UAAU,CAAA,QAAA,EAAW,KAAK,CAAA,CAAA;AAAA,IAC7B,MAAA,KAAW,MAAA,IAAU,CAAA,EAAG,UAAU,CAAA,MAAA,CAAA;AAAA,IAClC,SAAA,IAAa,GAAG,UAAU,CAAA,SAAA,CAAA;AAAA,IAC1B;AAAA,GACF;AACF;AAEO,IAAM,uBAAA,GAA0B,CAAC,OAAA,GAAkC,EAAC,KAAgB;AACzF,EAAA,OAAO,wBAAwB,OAAO,CAAA,CACnC,MAAM,GAAG,CAAA,CACT,OAAO,OAAO,CAAA;AACnB;;;ACxBO,IAAM,2BAAA,GAA8B,CACzC,QAAA,KAC4B;AAC5B,EAAA,IAAI,CAAC,QAAA,EAAU;AACb,IAAA,OAAO,MAAA;AAAA,EACT;AAEA,EAAA,MAAM,OAAO,OAAO,QAAA,KAAa,QAAA,GAAW,QAAA,CAAS,QAAQ,CAAA,GAAI,CAAA;AAEjE,EAAA,OAAO;AAAA,IACL,QAAA,EAAU,QAAA;AAAA,IACV,YAAA,EAAc,UAAA;AAAA,IACd,OAAA,EAAS,aAAA;AAAA,IACT,eAAA,EAAiB,UAAA;AAAA,IACjB,eAAA,EAAiB;AAAA,GACnB;AACF","file":"index.js","sourcesContent":["export const TYPOGRAPHY_VARIANTS = [\n \"LargeTitle\",\n \"Title1\",\n \"Title2\",\n \"Title3\",\n \"Headline\",\n \"Body\",\n \"Inputs\",\n \"Subheadline\",\n \"FootnoteUnderline\",\n \"Footnote\",\n \"Caption\",\n \"Caption2\",\n \"AccentH1\",\n \"AccentH2\",\n \"AccentSubttl\",\n \"AccentSubttl2\",\n \"AccentCaption\",\n \"AccentCaption2\",\n \"AccentRegularM\",\n \"AccentRegularS\",\n \"AccentLargeTtl\",\n \"AppMediumBody\",\n \"AppMediumSubtext\",\n \"AppMediumSubtextUnderline\",\n] as const;\n\nexport const TYPOGRAPHY_COLORS = [\n \"primary\",\n \"secondary\",\n \"tertiary\",\n \"quaternary\",\n \"link\",\n \"white\",\n \"dark\",\n \"alert\",\n \"malahit\",\n \"attantion\",\n] as const;\n\nexport type TypographyVariant = (typeof TYPOGRAPHY_VARIANTS)[number];\nexport type TypographyColor = (typeof TYPOGRAPHY_COLORS)[number];\nexport type TypographyWeight = \"normal\" | \"bold\";\n\nexport interface TypographyClassOptions {\n variant?: TypographyVariant;\n color?: TypographyColor;\n weight?: TypographyWeight;\n clickable?: boolean;\n className?: string | undefined;\n}\n\nexport type EllipsisOptions =\n | boolean\n | {\n rows?: number;\n };\n\nexport interface TypographyRenderOptions extends TypographyClassOptions {\n ellipsis?: EllipsisOptions;\n}\n","import type { TypographyClassOptions } from \"./types\";\n\nconst BASE_CLASS = \"tach-typography\";\n\nconst join = (...parts: Array): string =>\n parts.filter(Boolean).join(\" \");\n\nexport const tachTypographyClassName = ({\n variant = \"Body\",\n color = \"primary\",\n weight = \"normal\",\n clickable = false,\n className,\n}: TypographyClassOptions = {}): string => {\n return join(\n BASE_CLASS,\n `${BASE_CLASS}--${variant}`,\n `${BASE_CLASS}--color-${color}`,\n weight === \"bold\" && `${BASE_CLASS}--bold`,\n clickable && `${BASE_CLASS}--pointer`,\n className,\n );\n};\n\nexport const tachTypographyClassList = (options: TypographyClassOptions = {}): string[] => {\n return tachTypographyClassName(options)\n .split(\" \")\n .filter(Boolean);\n};\n","import type { EllipsisOptions } from \"./types\";\n\ntype StyleRecord = Record;\n\nexport const tachTypographyEllipsisStyle = (\n ellipsis?: EllipsisOptions,\n): StyleRecord | undefined => {\n if (!ellipsis) {\n return undefined;\n }\n\n const rows = typeof ellipsis === \"object\" ? ellipsis.rows ?? 1 : 1;\n\n return {\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n display: \"-webkit-box\",\n WebkitBoxOrient: \"vertical\",\n WebkitLineClamp: rows,\n };\n};\n"]} \ No newline at end of file +{"version":3,"sources":["../../src/core/types.ts","../../src/core/classnames.ts","../../src/core/ellipsis.ts","../../src/core/markdown.ts"],"names":[],"mappings":";AAAO,IAAM,mBAAA,GAAsB;AAAA,EACjC,YAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,UAAA;AAAA,EACA,MAAA;AAAA,EACA,QAAA;AAAA,EACA,aAAA;AAAA,EACA,mBAAA;AAAA,EACA,UAAA;AAAA,EACA,SAAA;AAAA,EACA,UAAA;AAAA,EACA,UAAA;AAAA,EACA,UAAA;AAAA,EACA,cAAA;AAAA,EACA,eAAA;AAAA,EACA,eAAA;AAAA,EACA,gBAAA;AAAA,EACA,gBAAA;AAAA,EACA,gBAAA;AAAA,EACA,gBAAA;AAAA,EACA,eAAA;AAAA,EACA,kBAAA;AAAA,EACA;AACF;AAEO,IAAM,iBAAA,GAAoB;AAAA,EAC/B,SAAA;AAAA,EACA,WAAA;AAAA,EACA,UAAA;AAAA,EACA,YAAA;AAAA,EACA,MAAA;AAAA,EACA,OAAA;AAAA,EACA,MAAA;AAAA,EACA,OAAA;AAAA,EACA,SAAA;AAAA,EACA;AACF;;;ACpCA,IAAM,UAAA,GAAa,iBAAA;AAEnB,IAAM,IAAA,GAAO,IAAI,KAAA,KACf,KAAA,CAAM,OAAO,OAAO,CAAA,CAAE,KAAK,GAAG,CAAA;AAEzB,IAAM,0BAA0B,CAAC;AAAA,EACtC,OAAA,GAAU,MAAA;AAAA,EACV,KAAA,GAAQ,SAAA;AAAA,EACR,MAAA,GAAS,QAAA;AAAA,EACT,SAAA,GAAY,KAAA;AAAA,EACZ;AACF,CAAA,GAA4B,EAAC,KAAc;AACzC,EAAA,OAAO,IAAA;AAAA,IACL,UAAA;AAAA,IACA,CAAA,EAAG,UAAU,CAAA,EAAA,EAAK,OAAO,CAAA,CAAA;AAAA,IACzB,CAAA,EAAG,UAAU,CAAA,QAAA,EAAW,KAAK,CAAA,CAAA;AAAA,IAC7B,MAAA,KAAW,MAAA,IAAU,CAAA,EAAG,UAAU,CAAA,MAAA,CAAA;AAAA,IAClC,SAAA,IAAa,GAAG,UAAU,CAAA,SAAA,CAAA;AAAA,IAC1B;AAAA,GACF;AACF;AAEO,IAAM,uBAAA,GAA0B,CAAC,OAAA,GAAkC,EAAC,KAAgB;AACzF,EAAA,OAAO,wBAAwB,OAAO,CAAA,CACnC,MAAM,GAAG,CAAA,CACT,OAAO,OAAO,CAAA;AACnB;;;ACxBO,IAAM,2BAAA,GAA8B,CACzC,QAAA,KAC4B;AAC5B,EAAA,IAAI,CAAC,QAAA,EAAU;AACb,IAAA,OAAO,MAAA;AAAA,EACT;AAEA,EAAA,MAAM,OAAO,OAAO,QAAA,KAAa,QAAA,GAAW,QAAA,CAAS,QAAQ,CAAA,GAAI,CAAA;AAEjE,EAAA,OAAO;AAAA,IACL,QAAA,EAAU,QAAA;AAAA,IACV,YAAA,EAAc,UAAA;AAAA,IACd,OAAA,EAAS,aAAA;AAAA,IACT,eAAA,EAAiB,UAAA;AAAA,IACjB,eAAA,EAAiB;AAAA,GACnB;AACF;;;ACpBA,IAAM,YAAA,GAAe,aAAA;AACrB,IAAM,iBAAA,GAAoB,+BAAA;AAE1B,IAAM,UAAA,GAAa,CAAC,KAAA,KAClB,KAAA,CACG,QAAQ,IAAA,EAAM,OAAO,CAAA,CACrB,OAAA,CAAQ,IAAA,EAAM,MAAM,EACpB,OAAA,CAAQ,IAAA,EAAM,MAAM,CAAA,CACpB,OAAA,CAAQ,MAAM,QAAQ,CAAA,CACtB,OAAA,CAAQ,IAAA,EAAM,OAAO,CAAA;AAE1B,IAAM,oBAAoB,CAAC,KAAA,KAA0B,KAAA,CAAM,OAAA,CAAQ,UAAU,IAAI,CAAA;AAEjF,IAAM,YAAA,GAAe,CAAC,KAAA,KAAiC;AACrD,EAAA,MAAM,IAAA,GAAO,MAAM,IAAA,EAAK;AAExB,EAAA,IAAI,CAAC,IAAA,IAAQ,CAAC,iBAAA,CAAkB,IAAA,CAAK,IAAI,CAAA,EAAG;AAC1C,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,OAAO,IAAA;AACT,CAAA;AAEO,IAAM,4BAAA,GAA+B,CAAC,QAAA,KAA6B;AACxE,EAAA,MAAM,MAAA,GAAS,kBAAkB,QAAQ,CAAA;AACzC,EAAA,MAAM,QAAA,uBAAe,GAAA,EAAoB;AACzC,EAAA,IAAI,OAAA,GAAU,CAAA;AAEd,EAAA,MAAM,YAAY,MAAA,CACf,OAAA,CAAQ,cAAA,EAAgB,CAAC,QAAQ,IAAA,KAAiB;AACjD,IAAA,MAAM,KAAA,GAAQ,CAAA,EAAG,YAAY,CAAA,EAAG,OAAA,EAAS,CAAA,CAAA;AACzC,IAAA,QAAA,CAAS,GAAA;AAAA,MACP,KAAA;AAAA,MACA,CAAA,uCAAA,EAA0C,UAAA,CAAW,IAAI,CAAC,CAAA,OAAA;AAAA,KAC5D;AACA,IAAA,OAAO,KAAA;AAAA,EACT,CAAC,CAAA,CACA,OAAA,CAAQ,gCAAgC,CAAC,MAAA,EAAQ,OAAe,OAAA,KAAoB;AACnF,IAAA,MAAM,KAAA,GAAQ,CAAA,EAAG,YAAY,CAAA,EAAG,OAAA,EAAS,CAAA,CAAA;AACzC,IAAA,MAAM,IAAA,GAAO,aAAa,OAAO,CAAA;AAEjC,IAAA,IAAI,CAAC,IAAA,EAAM;AACT,MAAA,QAAA,CAAS,GAAA,CAAI,KAAA,EAAO,UAAA,CAAW,KAAK,CAAC,CAAA;AACrC,MAAA,OAAO,KAAA;AAAA,IACT;AAEA,IAAA,QAAA,CAAS,GAAA;AAAA,MACP,KAAA;AAAA,MACA,6CAA6C,UAAA,CAAW,IAAI,CAAC,CAAA,4CAAA,EAA+C,UAAA,CAAW,KAAK,CAAC,CAAA,IAAA;AAAA,KAC/H;AACA,IAAA,OAAO,KAAA;AAAA,EACT,CAAC,CAAA;AAEH,EAAA,IAAI,IAAA,GAAO,UAAA,CAAW,SAAS,CAAA,CAC5B,OAAA,CAAQ,oBAAA,EAAsB,qBAAqB,CAAA,CACnD,OAAA,CAAQ,gBAAA,EAAkB,qBAAqB,CAAA,CAC/C,OAAA,CAAQ,kBAAkB,aAAa,CAAA,CACvC,OAAA,CAAQ,cAAA,EAAgB,aAAa,CAAA,CACrC,OAAA,CAAQ,gBAAA,EAAkB,eAAe,CAAA,CACzC,OAAA,CAAQ,KAAA,EAAO,QAAQ,CAAA;AAE1B,EAAA,IAAA,GAAO,IAAA,CAAK,OAAA,CAAQ,IAAI,MAAA,CAAO,GAAG,YAAY,CAAA,IAAA,CAAA,EAAQ,GAAG,CAAA,EAAG,CAAA,KAAA,KAAS,QAAA,CAAS,GAAA,CAAI,KAAK,KAAK,KAAK,CAAA;AAEjG,EAAA,OAAO,IAAA;AACT","file":"index.js","sourcesContent":["export const TYPOGRAPHY_VARIANTS = [\n \"LargeTitle\",\n \"Title1\",\n \"Title2\",\n \"Title3\",\n \"Headline\",\n \"Body\",\n \"Inputs\",\n \"Subheadline\",\n \"FootnoteUnderline\",\n \"Footnote\",\n \"Caption\",\n \"Caption2\",\n \"AccentH1\",\n \"AccentH2\",\n \"AccentSubttl\",\n \"AccentSubttl2\",\n \"AccentCaption\",\n \"AccentCaption2\",\n \"AccentRegularM\",\n \"AccentRegularS\",\n \"AccentLargeTtl\",\n \"AppMediumBody\",\n \"AppMediumSubtext\",\n \"AppMediumSubtextUnderline\",\n] as const;\n\nexport const TYPOGRAPHY_COLORS = [\n \"primary\",\n \"secondary\",\n \"tertiary\",\n \"quaternary\",\n \"link\",\n \"white\",\n \"dark\",\n \"alert\",\n \"malahit\",\n \"attantion\",\n] as const;\n\nexport type TypographyVariant = (typeof TYPOGRAPHY_VARIANTS)[number];\nexport type TypographyColor = (typeof TYPOGRAPHY_COLORS)[number];\nexport type TypographyWeight = \"normal\" | \"bold\";\n\nexport interface TypographyClassOptions {\n variant?: TypographyVariant;\n color?: TypographyColor;\n weight?: TypographyWeight;\n clickable?: boolean;\n className?: string | undefined;\n}\n\nexport type EllipsisOptions =\n | boolean\n | {\n rows?: number;\n };\n\nexport interface TypographyRenderOptions extends TypographyClassOptions {\n ellipsis?: EllipsisOptions;\n}\n","import type { TypographyClassOptions } from \"./types\";\n\nconst BASE_CLASS = \"tach-typography\";\n\nconst join = (...parts: Array): string =>\n parts.filter(Boolean).join(\" \");\n\nexport const tachTypographyClassName = ({\n variant = \"Body\",\n color = \"primary\",\n weight = \"normal\",\n clickable = false,\n className,\n}: TypographyClassOptions = {}): string => {\n return join(\n BASE_CLASS,\n `${BASE_CLASS}--${variant}`,\n `${BASE_CLASS}--color-${color}`,\n weight === \"bold\" && `${BASE_CLASS}--bold`,\n clickable && `${BASE_CLASS}--pointer`,\n className,\n );\n};\n\nexport const tachTypographyClassList = (options: TypographyClassOptions = {}): string[] => {\n return tachTypographyClassName(options)\n .split(\" \")\n .filter(Boolean);\n};\n","import type { EllipsisOptions } from \"./types\";\n\ntype StyleRecord = Record;\n\nexport const tachTypographyEllipsisStyle = (\n ellipsis?: EllipsisOptions,\n): StyleRecord | undefined => {\n if (!ellipsis) {\n return undefined;\n }\n\n const rows = typeof ellipsis === \"object\" ? ellipsis.rows ?? 1 : 1;\n\n return {\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n display: \"-webkit-box\",\n WebkitBoxOrient: \"vertical\",\n WebkitLineClamp: rows,\n };\n};\n","const TOKEN_PREFIX = \"TACHMDTOKEN\";\nconst SAFE_HREF_PATTERN = /^(https?:|mailto:|tel:|\\/|#)/i;\n\nconst escapeHtml = (value: string): string =>\n value\n .replace(/&/g, \"&\")\n .replace(//g, \">\")\n .replace(/\"/g, \""\")\n .replace(/'/g, \"'\");\n\nconst normalizeMarkdown = (value: string): string => value.replace(/\\r\\n?/g, \"\\n\");\n\nconst sanitizeHref = (value: string): string | null => {\n const href = value.trim();\n\n if (!href || !SAFE_HREF_PATTERN.test(href)) {\n return null;\n }\n\n return href;\n};\n\nexport const tachTypographyMarkdownToHtml = (markdown: string): string => {\n const source = normalizeMarkdown(markdown);\n const tokenMap = new Map();\n let tokenId = 0;\n\n const tokenized = source\n .replace(/`([^`\\n]+)`/g, (_match, code: string) => {\n const token = `${TOKEN_PREFIX}${tokenId++}`;\n tokenMap.set(\n token,\n `${escapeHtml(code)}`,\n );\n return token;\n })\n .replace(/\\[([^\\]\\n]+)\\]\\(([^)\\n]+)\\)/g, (_match, label: string, hrefRaw: string) => {\n const token = `${TOKEN_PREFIX}${tokenId++}`;\n const href = sanitizeHref(hrefRaw);\n\n if (!href) {\n tokenMap.set(token, escapeHtml(label));\n return token;\n }\n\n tokenMap.set(\n token,\n `${escapeHtml(label)}`,\n );\n return token;\n });\n\n let html = escapeHtml(tokenized)\n .replace(/\\*\\*([^*\\n]+)\\*\\*/g, \"$1\")\n .replace(/__([^_\\n]+)__/g, \"$1\")\n .replace(/\\*([^*\\n]+)\\*/g, \"$1\")\n .replace(/_([^_\\n]+)_/g, \"$1\")\n .replace(/~~([^~\\n]+)~~/g, \"$1\")\n .replace(/\\n/g, \"
\");\n\n html = html.replace(new RegExp(`${TOKEN_PREFIX}\\\\d+`, \"g\"), token => tokenMap.get(token) || token);\n\n return html;\n};\n"]} \ No newline at end of file diff --git a/packages/tach-typography/dist/react/index.cjs b/packages/tach-typography/dist/react/index.cjs index de3f8ff..01d03a0 100644 --- a/packages/tach-typography/dist/react/index.cjs +++ b/packages/tach-typography/dist/react/index.cjs @@ -29,23 +29,78 @@ var tachTypographyClassName = ({ 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__default.default.forwardRef( - ({ color = "primary", weight = "normal", className, onClick, ...rest }, ref) => /* @__PURE__ */ jsxRuntime.jsx( - Component, - { - ref, - className: tachTypographyClassName({ - variant, - color, - weight, - className, - clickable: Boolean(onClick) - }), - onClick, - ...rest - } - ) + ({ + 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__ */ jsxRuntime.jsx("span", { dangerouslySetInnerHTML: { __html: markdownHtml } }) : children; + const contentProps = { children: renderedChildren }; + return /* @__PURE__ */ jsxRuntime.jsx( + Component, + { + ref, + className: tachTypographyClassName({ + variant, + color, + weight, + className, + clickable: Boolean(onClick) + }), + onClick, + ...rest, + ...contentProps + } + ); + } ); Variant.displayName = String(variant); return Variant; diff --git a/packages/tach-typography/dist/react/index.cjs.map b/packages/tach-typography/dist/react/index.cjs.map index 1a9d1cb..405e3a8 100644 --- a/packages/tach-typography/dist/react/index.cjs.map +++ b/packages/tach-typography/dist/react/index.cjs.map @@ -1 +1 @@ -{"version":3,"sources":["../../src/core/classnames.ts","../../src/react/index.tsx"],"names":["React","jsx","Typography"],"mappings":"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","file":"index.cjs","sourcesContent":["import type { TypographyClassOptions } from \"./types\";\n\nconst BASE_CLASS = \"tach-typography\";\n\nconst join = (...parts: Array): string =>\n parts.filter(Boolean).join(\" \");\n\nexport const tachTypographyClassName = ({\n variant = \"Body\",\n color = \"primary\",\n weight = \"normal\",\n clickable = false,\n className,\n}: TypographyClassOptions = {}): string => {\n return join(\n BASE_CLASS,\n `${BASE_CLASS}--${variant}`,\n `${BASE_CLASS}--color-${color}`,\n weight === \"bold\" && `${BASE_CLASS}--bold`,\n clickable && `${BASE_CLASS}--pointer`,\n className,\n );\n};\n\nexport const tachTypographyClassList = (options: TypographyClassOptions = {}): string[] => {\n return tachTypographyClassName(options)\n .split(\" \")\n .filter(Boolean);\n};\n","import React from \"react\";\n\nimport { Typography } from \"antd\";\nimport type { LinkProps } from \"antd/lib/typography/Link\";\nimport type { ParagraphProps } from \"antd/lib/typography/Paragraph\";\nimport type { TextProps } from \"antd/lib/typography/Text\";\nimport type { TitleProps } from \"antd/lib/typography/Title\";\n\nimport {\n tachTypographyClassName,\n type TypographyColor,\n type TypographyVariant,\n type TypographyWeight,\n} from \"../core\";\n\ninterface AdditionalProps {\n color?: TypographyColor;\n weight?: TypographyWeight;\n onClick?: (event: React.MouseEvent) => void;\n className?: string | undefined;\n}\n\nconst createTypographyVariant =

(\n Component: React.ComponentType

,\n variant: TypographyVariant,\n) => {\n const Variant = React.forwardRef(\n ({ color = \"primary\", weight = \"normal\", className, onClick, ...rest }, ref) => (\n \n ),\n );\n\n Variant.displayName = String(variant);\n\n return Variant;\n};\n\nconst createTypographyComponent =

(Component: React.ComponentType

) => ({\n LargeTitle: createTypographyVariant(Component, \"LargeTitle\"),\n Title1: createTypographyVariant(Component, \"Title1\"),\n Title2: createTypographyVariant(Component, \"Title2\"),\n Title3: createTypographyVariant(Component, \"Title3\"),\n Headline: createTypographyVariant(Component, \"Headline\"),\n Body: createTypographyVariant(Component, \"Body\"),\n Inputs: createTypographyVariant(Component, \"Inputs\"),\n Subheadline: createTypographyVariant(Component, \"Subheadline\"),\n FootnoteUnderline: createTypographyVariant(Component, \"FootnoteUnderline\"),\n Footnote: createTypographyVariant(Component, \"Footnote\"),\n Caption: createTypographyVariant(Component, \"Caption\"),\n Caption2: createTypographyVariant(Component, \"Caption2\"),\n\n AccentH1: createTypographyVariant(Component, \"AccentH1\"),\n AccentH2: createTypographyVariant(Component, \"AccentH2\"),\n AccentSubttl: createTypographyVariant(Component, \"AccentSubttl\"),\n AccentSubttl2: createTypographyVariant(Component, \"AccentSubttl2\"),\n AccentCaption: createTypographyVariant(Component, \"AccentCaption\"),\n AccentCaption2: createTypographyVariant(Component, \"AccentCaption2\"),\n AccentRegularM: createTypographyVariant(Component, \"AccentRegularM\"),\n AccentRegularS: createTypographyVariant(Component, \"AccentRegularS\"),\n AccentLargeTtl: createTypographyVariant(Component, \"AccentLargeTtl\"),\n AppMediumBody: createTypographyVariant(Component, \"AppMediumBody\"),\n AppMediumSubtext: createTypographyVariant(Component, \"AppMediumSubtext\"),\n AppMediumSubtextUnderline: createTypographyVariant(Component, \"AppMediumSubtextUnderline\"),\n});\n\nexport const TachTypography = {\n Text: createTypographyComponent>(Typography.Text),\n Paragraph: createTypographyComponent(Typography.Paragraph),\n Link: createTypographyComponent(Typography.Link),\n Title: createTypographyComponent(Typography.Title),\n};\n"]} \ No newline at end of file +{"version":3,"sources":["../../src/core/classnames.ts","../../src/core/markdown.ts","../../src/react/index.tsx"],"names":["React","jsx","Typography"],"mappings":"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","file":"index.cjs","sourcesContent":["import type { TypographyClassOptions } from \"./types\";\n\nconst BASE_CLASS = \"tach-typography\";\n\nconst join = (...parts: Array): string =>\n parts.filter(Boolean).join(\" \");\n\nexport const tachTypographyClassName = ({\n variant = \"Body\",\n color = \"primary\",\n weight = \"normal\",\n clickable = false,\n className,\n}: TypographyClassOptions = {}): string => {\n return join(\n BASE_CLASS,\n `${BASE_CLASS}--${variant}`,\n `${BASE_CLASS}--color-${color}`,\n weight === \"bold\" && `${BASE_CLASS}--bold`,\n clickable && `${BASE_CLASS}--pointer`,\n className,\n );\n};\n\nexport const tachTypographyClassList = (options: TypographyClassOptions = {}): string[] => {\n return tachTypographyClassName(options)\n .split(\" \")\n .filter(Boolean);\n};\n","const TOKEN_PREFIX = \"TACHMDTOKEN\";\nconst SAFE_HREF_PATTERN = /^(https?:|mailto:|tel:|\\/|#)/i;\n\nconst escapeHtml = (value: string): string =>\n value\n .replace(/&/g, \"&\")\n .replace(//g, \">\")\n .replace(/\"/g, \""\")\n .replace(/'/g, \"'\");\n\nconst normalizeMarkdown = (value: string): string => value.replace(/\\r\\n?/g, \"\\n\");\n\nconst sanitizeHref = (value: string): string | null => {\n const href = value.trim();\n\n if (!href || !SAFE_HREF_PATTERN.test(href)) {\n return null;\n }\n\n return href;\n};\n\nexport const tachTypographyMarkdownToHtml = (markdown: string): string => {\n const source = normalizeMarkdown(markdown);\n const tokenMap = new Map();\n let tokenId = 0;\n\n const tokenized = source\n .replace(/`([^`\\n]+)`/g, (_match, code: string) => {\n const token = `${TOKEN_PREFIX}${tokenId++}`;\n tokenMap.set(\n token,\n `${escapeHtml(code)}`,\n );\n return token;\n })\n .replace(/\\[([^\\]\\n]+)\\]\\(([^)\\n]+)\\)/g, (_match, label: string, hrefRaw: string) => {\n const token = `${TOKEN_PREFIX}${tokenId++}`;\n const href = sanitizeHref(hrefRaw);\n\n if (!href) {\n tokenMap.set(token, escapeHtml(label));\n return token;\n }\n\n tokenMap.set(\n token,\n `${escapeHtml(label)}`,\n );\n return token;\n });\n\n let html = escapeHtml(tokenized)\n .replace(/\\*\\*([^*\\n]+)\\*\\*/g, \"$1\")\n .replace(/__([^_\\n]+)__/g, \"$1\")\n .replace(/\\*([^*\\n]+)\\*/g, \"$1\")\n .replace(/_([^_\\n]+)_/g, \"$1\")\n .replace(/~~([^~\\n]+)~~/g, \"$1\")\n .replace(/\\n/g, \"
\");\n\n html = html.replace(new RegExp(`${TOKEN_PREFIX}\\\\d+`, \"g\"), token => tokenMap.get(token) || token);\n\n return html;\n};\n","import React from \"react\";\n\nimport { Typography } from \"antd\";\nimport type { LinkProps } from \"antd/lib/typography/Link\";\nimport type { ParagraphProps } from \"antd/lib/typography/Paragraph\";\nimport type { TextProps } from \"antd/lib/typography/Text\";\nimport type { TitleProps } from \"antd/lib/typography/Title\";\n\nimport {\n tachTypographyMarkdownToHtml,\n tachTypographyClassName,\n type TypographyColor,\n type TypographyVariant,\n type TypographyWeight,\n} from \"../core\";\n\ninterface AdditionalProps {\n color?: TypographyColor;\n weight?: TypographyWeight;\n onClick?: (event: React.MouseEvent) => void;\n className?: string | undefined;\n markdownEnabled?: boolean;\n children?: React.ReactNode;\n}\n\nconst createTypographyVariant =

(\n Component: React.ComponentType

,\n variant: TypographyVariant,\n) => {\n const Variant = React.forwardRef(\n (\n {\n color = \"primary\",\n weight = \"normal\",\n className,\n onClick,\n markdownEnabled = false,\n children,\n ...rest\n },\n ref,\n ) => {\n const markdownHtml =\n markdownEnabled && typeof children === \"string\"\n ? tachTypographyMarkdownToHtml(children)\n : undefined;\n const renderedChildren = markdownHtml ? (\n \n ) : (\n children\n );\n const contentProps = { children: renderedChildren } as unknown as P;\n\n return (\n \n );\n },\n );\n\n Variant.displayName = String(variant);\n\n return Variant;\n};\n\nconst createTypographyComponent =

(Component: React.ComponentType

) => ({\n LargeTitle: createTypographyVariant(Component, \"LargeTitle\"),\n Title1: createTypographyVariant(Component, \"Title1\"),\n Title2: createTypographyVariant(Component, \"Title2\"),\n Title3: createTypographyVariant(Component, \"Title3\"),\n Headline: createTypographyVariant(Component, \"Headline\"),\n Body: createTypographyVariant(Component, \"Body\"),\n Inputs: createTypographyVariant(Component, \"Inputs\"),\n Subheadline: createTypographyVariant(Component, \"Subheadline\"),\n FootnoteUnderline: createTypographyVariant(Component, \"FootnoteUnderline\"),\n Footnote: createTypographyVariant(Component, \"Footnote\"),\n Caption: createTypographyVariant(Component, \"Caption\"),\n Caption2: createTypographyVariant(Component, \"Caption2\"),\n\n AccentH1: createTypographyVariant(Component, \"AccentH1\"),\n AccentH2: createTypographyVariant(Component, \"AccentH2\"),\n AccentSubttl: createTypographyVariant(Component, \"AccentSubttl\"),\n AccentSubttl2: createTypographyVariant(Component, \"AccentSubttl2\"),\n AccentCaption: createTypographyVariant(Component, \"AccentCaption\"),\n AccentCaption2: createTypographyVariant(Component, \"AccentCaption2\"),\n AccentRegularM: createTypographyVariant(Component, \"AccentRegularM\"),\n AccentRegularS: createTypographyVariant(Component, \"AccentRegularS\"),\n AccentLargeTtl: createTypographyVariant(Component, \"AccentLargeTtl\"),\n AppMediumBody: createTypographyVariant(Component, \"AppMediumBody\"),\n AppMediumSubtext: createTypographyVariant(Component, \"AppMediumSubtext\"),\n AppMediumSubtextUnderline: createTypographyVariant(Component, \"AppMediumSubtextUnderline\"),\n});\n\nexport const TachTypography = {\n Text: createTypographyComponent>(Typography.Text),\n Paragraph: createTypographyComponent(Typography.Paragraph),\n Link: createTypographyComponent(Typography.Link),\n Title: createTypographyComponent(Typography.Title),\n};\n"]} \ No newline at end of file diff --git a/packages/tach-typography/dist/react/index.d.cts b/packages/tach-typography/dist/react/index.d.cts index f821244..bdd961f 100644 --- a/packages/tach-typography/dist/react/index.d.cts +++ b/packages/tach-typography/dist/react/index.d.cts @@ -10,6 +10,8 @@ interface AdditionalProps { weight?: TypographyWeight; onClick?: (event: React.MouseEvent) => void; className?: string | undefined; + markdownEnabled?: boolean; + children?: React.ReactNode; } declare const TachTypography: { Text: { diff --git a/packages/tach-typography/dist/react/index.d.ts b/packages/tach-typography/dist/react/index.d.ts index f80de44..e9976a0 100644 --- a/packages/tach-typography/dist/react/index.d.ts +++ b/packages/tach-typography/dist/react/index.d.ts @@ -10,6 +10,8 @@ interface AdditionalProps { weight?: TypographyWeight; onClick?: (event: React.MouseEvent) => void; className?: string | undefined; + markdownEnabled?: boolean; + children?: React.ReactNode; } declare const TachTypography: { Text: { diff --git a/packages/tach-typography/dist/react/index.js b/packages/tach-typography/dist/react/index.js index 9bda140..a37c56b 100644 --- a/packages/tach-typography/dist/react/index.js +++ b/packages/tach-typography/dist/react/index.js @@ -23,23 +23,78 @@ var tachTypographyClassName = ({ 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, ...rest }, ref) => /* @__PURE__ */ jsx( - Component, - { - ref, - className: tachTypographyClassName({ - variant, - color, - weight, - className, - clickable: Boolean(onClick) - }), - onClick, - ...rest - } - ) + ({ + 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; diff --git a/packages/tach-typography/dist/react/index.js.map b/packages/tach-typography/dist/react/index.js.map index a4e029b..c3d6fbf 100644 --- a/packages/tach-typography/dist/react/index.js.map +++ b/packages/tach-typography/dist/react/index.js.map @@ -1 +1 @@ -{"version":3,"sources":["../../src/core/classnames.ts","../../src/react/index.tsx"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["import type { TypographyClassOptions } from \"./types\";\n\nconst BASE_CLASS = \"tach-typography\";\n\nconst join = (...parts: Array): string =>\n parts.filter(Boolean).join(\" \");\n\nexport const tachTypographyClassName = ({\n variant = \"Body\",\n color = \"primary\",\n weight = \"normal\",\n clickable = false,\n className,\n}: TypographyClassOptions = {}): string => {\n return join(\n BASE_CLASS,\n `${BASE_CLASS}--${variant}`,\n `${BASE_CLASS}--color-${color}`,\n weight === \"bold\" && `${BASE_CLASS}--bold`,\n clickable && `${BASE_CLASS}--pointer`,\n className,\n );\n};\n\nexport const tachTypographyClassList = (options: TypographyClassOptions = {}): string[] => {\n return tachTypographyClassName(options)\n .split(\" \")\n .filter(Boolean);\n};\n","import React from \"react\";\n\nimport { Typography } from \"antd\";\nimport type { LinkProps } from \"antd/lib/typography/Link\";\nimport type { ParagraphProps } from \"antd/lib/typography/Paragraph\";\nimport type { TextProps } from \"antd/lib/typography/Text\";\nimport type { TitleProps } from \"antd/lib/typography/Title\";\n\nimport {\n tachTypographyClassName,\n type TypographyColor,\n type TypographyVariant,\n type TypographyWeight,\n} from \"../core\";\n\ninterface AdditionalProps {\n color?: TypographyColor;\n weight?: TypographyWeight;\n onClick?: (event: React.MouseEvent) => void;\n className?: string | undefined;\n}\n\nconst createTypographyVariant =

(\n Component: React.ComponentType

,\n variant: TypographyVariant,\n) => {\n const Variant = React.forwardRef(\n ({ color = \"primary\", weight = \"normal\", className, onClick, ...rest }, ref) => (\n \n ),\n );\n\n Variant.displayName = String(variant);\n\n return Variant;\n};\n\nconst createTypographyComponent =

(Component: React.ComponentType

) => ({\n LargeTitle: createTypographyVariant(Component, \"LargeTitle\"),\n Title1: createTypographyVariant(Component, \"Title1\"),\n Title2: createTypographyVariant(Component, \"Title2\"),\n Title3: createTypographyVariant(Component, \"Title3\"),\n Headline: createTypographyVariant(Component, \"Headline\"),\n Body: createTypographyVariant(Component, \"Body\"),\n Inputs: createTypographyVariant(Component, \"Inputs\"),\n Subheadline: createTypographyVariant(Component, \"Subheadline\"),\n FootnoteUnderline: createTypographyVariant(Component, \"FootnoteUnderline\"),\n Footnote: createTypographyVariant(Component, \"Footnote\"),\n Caption: createTypographyVariant(Component, \"Caption\"),\n Caption2: createTypographyVariant(Component, \"Caption2\"),\n\n AccentH1: createTypographyVariant(Component, \"AccentH1\"),\n AccentH2: createTypographyVariant(Component, \"AccentH2\"),\n AccentSubttl: createTypographyVariant(Component, \"AccentSubttl\"),\n AccentSubttl2: createTypographyVariant(Component, \"AccentSubttl2\"),\n AccentCaption: createTypographyVariant(Component, \"AccentCaption\"),\n AccentCaption2: createTypographyVariant(Component, \"AccentCaption2\"),\n AccentRegularM: createTypographyVariant(Component, \"AccentRegularM\"),\n AccentRegularS: createTypographyVariant(Component, \"AccentRegularS\"),\n AccentLargeTtl: createTypographyVariant(Component, \"AccentLargeTtl\"),\n AppMediumBody: createTypographyVariant(Component, \"AppMediumBody\"),\n AppMediumSubtext: createTypographyVariant(Component, \"AppMediumSubtext\"),\n AppMediumSubtextUnderline: createTypographyVariant(Component, \"AppMediumSubtextUnderline\"),\n});\n\nexport const TachTypography = {\n Text: createTypographyComponent>(Typography.Text),\n Paragraph: createTypographyComponent(Typography.Paragraph),\n Link: createTypographyComponent(Typography.Link),\n Title: createTypographyComponent(Typography.Title),\n};\n"]} \ No newline at end of file +{"version":3,"sources":["../../src/core/classnames.ts","../../src/core/markdown.ts","../../src/react/index.tsx"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["import type { TypographyClassOptions } from \"./types\";\n\nconst BASE_CLASS = \"tach-typography\";\n\nconst join = (...parts: Array): string =>\n parts.filter(Boolean).join(\" \");\n\nexport const tachTypographyClassName = ({\n variant = \"Body\",\n color = \"primary\",\n weight = \"normal\",\n clickable = false,\n className,\n}: TypographyClassOptions = {}): string => {\n return join(\n BASE_CLASS,\n `${BASE_CLASS}--${variant}`,\n `${BASE_CLASS}--color-${color}`,\n weight === \"bold\" && `${BASE_CLASS}--bold`,\n clickable && `${BASE_CLASS}--pointer`,\n className,\n );\n};\n\nexport const tachTypographyClassList = (options: TypographyClassOptions = {}): string[] => {\n return tachTypographyClassName(options)\n .split(\" \")\n .filter(Boolean);\n};\n","const TOKEN_PREFIX = \"TACHMDTOKEN\";\nconst SAFE_HREF_PATTERN = /^(https?:|mailto:|tel:|\\/|#)/i;\n\nconst escapeHtml = (value: string): string =>\n value\n .replace(/&/g, \"&\")\n .replace(//g, \">\")\n .replace(/\"/g, \""\")\n .replace(/'/g, \"'\");\n\nconst normalizeMarkdown = (value: string): string => value.replace(/\\r\\n?/g, \"\\n\");\n\nconst sanitizeHref = (value: string): string | null => {\n const href = value.trim();\n\n if (!href || !SAFE_HREF_PATTERN.test(href)) {\n return null;\n }\n\n return href;\n};\n\nexport const tachTypographyMarkdownToHtml = (markdown: string): string => {\n const source = normalizeMarkdown(markdown);\n const tokenMap = new Map();\n let tokenId = 0;\n\n const tokenized = source\n .replace(/`([^`\\n]+)`/g, (_match, code: string) => {\n const token = `${TOKEN_PREFIX}${tokenId++}`;\n tokenMap.set(\n token,\n `${escapeHtml(code)}`,\n );\n return token;\n })\n .replace(/\\[([^\\]\\n]+)\\]\\(([^)\\n]+)\\)/g, (_match, label: string, hrefRaw: string) => {\n const token = `${TOKEN_PREFIX}${tokenId++}`;\n const href = sanitizeHref(hrefRaw);\n\n if (!href) {\n tokenMap.set(token, escapeHtml(label));\n return token;\n }\n\n tokenMap.set(\n token,\n `${escapeHtml(label)}`,\n );\n return token;\n });\n\n let html = escapeHtml(tokenized)\n .replace(/\\*\\*([^*\\n]+)\\*\\*/g, \"$1\")\n .replace(/__([^_\\n]+)__/g, \"$1\")\n .replace(/\\*([^*\\n]+)\\*/g, \"$1\")\n .replace(/_([^_\\n]+)_/g, \"$1\")\n .replace(/~~([^~\\n]+)~~/g, \"$1\")\n .replace(/\\n/g, \"
\");\n\n html = html.replace(new RegExp(`${TOKEN_PREFIX}\\\\d+`, \"g\"), token => tokenMap.get(token) || token);\n\n return html;\n};\n","import React from \"react\";\n\nimport { Typography } from \"antd\";\nimport type { LinkProps } from \"antd/lib/typography/Link\";\nimport type { ParagraphProps } from \"antd/lib/typography/Paragraph\";\nimport type { TextProps } from \"antd/lib/typography/Text\";\nimport type { TitleProps } from \"antd/lib/typography/Title\";\n\nimport {\n tachTypographyMarkdownToHtml,\n tachTypographyClassName,\n type TypographyColor,\n type TypographyVariant,\n type TypographyWeight,\n} from \"../core\";\n\ninterface AdditionalProps {\n color?: TypographyColor;\n weight?: TypographyWeight;\n onClick?: (event: React.MouseEvent) => void;\n className?: string | undefined;\n markdownEnabled?: boolean;\n children?: React.ReactNode;\n}\n\nconst createTypographyVariant =

(\n Component: React.ComponentType

,\n variant: TypographyVariant,\n) => {\n const Variant = React.forwardRef(\n (\n {\n color = \"primary\",\n weight = \"normal\",\n className,\n onClick,\n markdownEnabled = false,\n children,\n ...rest\n },\n ref,\n ) => {\n const markdownHtml =\n markdownEnabled && typeof children === \"string\"\n ? tachTypographyMarkdownToHtml(children)\n : undefined;\n const renderedChildren = markdownHtml ? (\n \n ) : (\n children\n );\n const contentProps = { children: renderedChildren } as unknown as P;\n\n return (\n \n );\n },\n );\n\n Variant.displayName = String(variant);\n\n return Variant;\n};\n\nconst createTypographyComponent =

(Component: React.ComponentType

) => ({\n LargeTitle: createTypographyVariant(Component, \"LargeTitle\"),\n Title1: createTypographyVariant(Component, \"Title1\"),\n Title2: createTypographyVariant(Component, \"Title2\"),\n Title3: createTypographyVariant(Component, \"Title3\"),\n Headline: createTypographyVariant(Component, \"Headline\"),\n Body: createTypographyVariant(Component, \"Body\"),\n Inputs: createTypographyVariant(Component, \"Inputs\"),\n Subheadline: createTypographyVariant(Component, \"Subheadline\"),\n FootnoteUnderline: createTypographyVariant(Component, \"FootnoteUnderline\"),\n Footnote: createTypographyVariant(Component, \"Footnote\"),\n Caption: createTypographyVariant(Component, \"Caption\"),\n Caption2: createTypographyVariant(Component, \"Caption2\"),\n\n AccentH1: createTypographyVariant(Component, \"AccentH1\"),\n AccentH2: createTypographyVariant(Component, \"AccentH2\"),\n AccentSubttl: createTypographyVariant(Component, \"AccentSubttl\"),\n AccentSubttl2: createTypographyVariant(Component, \"AccentSubttl2\"),\n AccentCaption: createTypographyVariant(Component, \"AccentCaption\"),\n AccentCaption2: createTypographyVariant(Component, \"AccentCaption2\"),\n AccentRegularM: createTypographyVariant(Component, \"AccentRegularM\"),\n AccentRegularS: createTypographyVariant(Component, \"AccentRegularS\"),\n AccentLargeTtl: createTypographyVariant(Component, \"AccentLargeTtl\"),\n AppMediumBody: createTypographyVariant(Component, \"AppMediumBody\"),\n AppMediumSubtext: createTypographyVariant(Component, \"AppMediumSubtext\"),\n AppMediumSubtextUnderline: createTypographyVariant(Component, \"AppMediumSubtextUnderline\"),\n});\n\nexport const TachTypography = {\n Text: createTypographyComponent>(Typography.Text),\n Paragraph: createTypographyComponent(Typography.Paragraph),\n Link: createTypographyComponent(Typography.Link),\n Title: createTypographyComponent(Typography.Title),\n};\n"]} \ No newline at end of file diff --git a/packages/tach-typography/dist/styles.css b/packages/tach-typography/dist/styles.css index 341acfd..8fecee7 100644 --- a/packages/tach-typography/dist/styles.css +++ b/packages/tach-typography/dist/styles.css @@ -88,6 +88,17 @@ .tach-typography--AppMediumSubtextUnderline, .ant-typography.tach-typography--AppMediumSubtextUnderline { font-family: Inter, sans-serif; font-size: 11px; font-weight: 400; line-height: 17px; text-decoration: underline; } +.tach-typography .tach-typography__md-link, +.ant-typography.tach-typography .tach-typography__md-link { + color: inherit; + text-decoration: underline; +} + +.tach-typography .tach-typography__md-code, +.ant-typography.tach-typography .tach-typography__md-code { + font-family: ui-monospace, SFMono-Regular, Menlo, monospace; +} + @media (max-width: 575px) { .tach-typography--AccentLargeTtl, .ant-typography.tach-typography--AccentLargeTtl { diff --git a/packages/tach-typography/package.json b/packages/tach-typography/package.json index 551aea9..983d686 100644 --- a/packages/tach-typography/package.json +++ b/packages/tach-typography/package.json @@ -1,6 +1,6 @@ { "name": "@hublib-web/tach-typography", - "version": "0.2.0", + "version": "0.3.0", "description": "Cross-framework typography package for React and Angular", "license": "MIT", "type": "module", diff --git a/packages/tach-typography/src/angular/index.ts b/packages/tach-typography/src/angular/index.ts index 33e4105..5e683fc 100644 --- a/packages/tach-typography/src/angular/index.ts +++ b/packages/tach-typography/src/angular/index.ts @@ -1,4 +1,4 @@ -import { NgStyle, NgSwitch, NgSwitchCase, NgSwitchDefault } from "@angular/common"; +import { NgIf, NgStyle, NgSwitch, NgSwitchCase, NgSwitchDefault } from "@angular/common"; import { ChangeDetectionStrategy, Component, @@ -19,6 +19,7 @@ import { tachTypographyClassList, tachTypographyClassName, tachTypographyEllipsisStyle, + tachTypographyMarkdownToHtml, type EllipsisOptions, type TypographyClassOptions, type TypographyColor, @@ -291,6 +292,7 @@ export class TachTypographyHostPropsDirective implements OnChanges { NgSwitch, NgSwitchCase, NgSwitchDefault, + NgIf, NgStyle, ], changeDetection: ChangeDetectionStrategy.OnPush, @@ -310,7 +312,12 @@ export class TachTypographyHostPropsDirective implements OnChanges { [ngStyle]="preserveStyle" (click)="handleClick($event)" > - + + + + + +

- + + + + + +

- + + + + + +

- + + + + + +

- + + + + + +

- + + + + + +

- + + + + + + `, }) -export class TachTypographyComponent { +export class TachTypographyComponent implements OnChanges { @Input("as") hostTag: TachTypographyHostTag = "span"; @Input() variant: TypographyVariant = "Body"; @Input() color: TypographyColor = "primary"; @Input() weight: TypographyWeight = "normal"; @Input() clickable = false; + @Input() markdownEnabled = false; + @Input() markdown: string | undefined; @Input() className: string | undefined; @Input() ellipsis: EllipsisOptions | undefined; @Input() nzProps: TachTypographyNzProps | undefined; @@ -425,6 +464,14 @@ export class TachTypographyComponent { @Output() readonly tachClick = new EventEmitter(); + renderedMarkdown = ""; + + ngOnChanges(_changes: SimpleChanges): void { + this.renderedMarkdown = this.markdownEnabled + ? tachTypographyMarkdownToHtml(this.markdown ?? "") + : ""; + } + handleClick(event: MouseEvent): void { this.tachClick.emit(event); } diff --git a/packages/tach-typography/src/core/index.test.ts b/packages/tach-typography/src/core/index.test.ts index 499e40a..d726bb0 100644 --- a/packages/tach-typography/src/core/index.test.ts +++ b/packages/tach-typography/src/core/index.test.ts @@ -4,6 +4,7 @@ import { tachTypographyClassList, tachTypographyClassName, tachTypographyEllipsisStyle, + tachTypographyMarkdownToHtml, } from "./index"; describe("tachTypographyClassName", () => { @@ -54,3 +55,27 @@ describe("tachTypographyEllipsisStyle", () => { }); }); }); + +describe("tachTypographyMarkdownToHtml", () => { + it("parses inline markdown tags", () => { + expect( + tachTypographyMarkdownToHtml("**bold** *italic* ~~strike~~ `code`"), + ).toBe( + "bold italic strike code", + ); + }); + + it("sanitizes html", () => { + expect(tachTypographyMarkdownToHtml("")).toBe( + "<script>alert(1)</script>", + ); + }); + + it("keeps only safe link protocols", () => { + expect( + tachTypographyMarkdownToHtml("[safe](https://example.com) [unsafe](javascript:alert-1)"), + ).toBe( + "safe unsafe", + ); + }); +}); diff --git a/packages/tach-typography/src/core/index.ts b/packages/tach-typography/src/core/index.ts index 804f5ac..81f20dc 100644 --- a/packages/tach-typography/src/core/index.ts +++ b/packages/tach-typography/src/core/index.ts @@ -1,3 +1,4 @@ export * from "./types"; export * from "./classnames"; export * from "./ellipsis"; +export * from "./markdown"; diff --git a/packages/tach-typography/src/core/markdown.ts b/packages/tach-typography/src/core/markdown.ts new file mode 100644 index 0000000..a42b810 --- /dev/null +++ b/packages/tach-typography/src/core/markdown.ts @@ -0,0 +1,65 @@ +const TOKEN_PREFIX = "TACHMDTOKEN"; +const SAFE_HREF_PATTERN = /^(https?:|mailto:|tel:|\/|#)/i; + +const escapeHtml = (value: string): string => + value + .replace(/&/g, "&") + .replace(//g, ">") + .replace(/"/g, """) + .replace(/'/g, "'"); + +const normalizeMarkdown = (value: string): string => value.replace(/\r\n?/g, "\n"); + +const sanitizeHref = (value: string): string | null => { + const href = value.trim(); + + if (!href || !SAFE_HREF_PATTERN.test(href)) { + return null; + } + + return href; +}; + +export const tachTypographyMarkdownToHtml = (markdown: string): string => { + const source = normalizeMarkdown(markdown); + const tokenMap = new Map(); + let tokenId = 0; + + const tokenized = source + .replace(/`([^`\n]+)`/g, (_match, code: string) => { + const token = `${TOKEN_PREFIX}${tokenId++}`; + tokenMap.set( + token, + `${escapeHtml(code)}`, + ); + return token; + }) + .replace(/\[([^\]\n]+)\]\(([^)\n]+)\)/g, (_match, label: string, hrefRaw: string) => { + 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; +}; diff --git a/packages/tach-typography/src/react/index.tsx b/packages/tach-typography/src/react/index.tsx index e93c7e0..9c5f0ca 100644 --- a/packages/tach-typography/src/react/index.tsx +++ b/packages/tach-typography/src/react/index.tsx @@ -7,6 +7,7 @@ import type { TextProps } from "antd/lib/typography/Text"; import type { TitleProps } from "antd/lib/typography/Title"; import { + tachTypographyMarkdownToHtml, tachTypographyClassName, type TypographyColor, type TypographyVariant, @@ -18,6 +19,8 @@ interface AdditionalProps { weight?: TypographyWeight; onClick?: (event: React.MouseEvent) => void; className?: string | undefined; + markdownEnabled?: boolean; + children?: React.ReactNode; } const createTypographyVariant =

( @@ -25,20 +28,45 @@ const createTypographyVariant =

( variant: TypographyVariant, ) => { const Variant = React.forwardRef( - ({ color = "primary", weight = "normal", className, onClick, ...rest }, ref) => ( - - ), + ( + { + color = "primary", + weight = "normal", + className, + onClick, + markdownEnabled = false, + children, + ...rest + }, + ref, + ) => { + const markdownHtml = + markdownEnabled && typeof children === "string" + ? tachTypographyMarkdownToHtml(children) + : undefined; + const renderedChildren = markdownHtml ? ( + + ) : ( + children + ); + const contentProps = { children: renderedChildren } as unknown as P; + + return ( + + ); + }, ); Variant.displayName = String(variant); diff --git a/packages/tach-typography/src/stories/TachTypography.Markdown.stories.tsx b/packages/tach-typography/src/stories/TachTypography.Markdown.stories.tsx new file mode 100644 index 0000000..94d9a46 --- /dev/null +++ b/packages/tach-typography/src/stories/TachTypography.Markdown.stories.tsx @@ -0,0 +1,157 @@ +import React from "react"; + +import type { Meta, StoryObj } from "@storybook/react"; + +import { + TYPOGRAPHY_COLORS, + TYPOGRAPHY_VARIANTS, + type TypographyColor, + type TypographyVariant, + type TypographyWeight, +} from "../core"; +import { TachTypography } from "../react"; + +type TypographyNamespace = keyof typeof TachTypography; + +type VariantComponentProps = { + children?: React.ReactNode; + className?: string; + color?: TypographyColor; + ellipsis?: boolean | { rows?: number }; + href?: string; + level?: 1 | 2 | 3 | 4 | 5; + markdownEnabled?: boolean; + onClick?: (event: React.MouseEvent) => void; + weight?: TypographyWeight; +}; + +type VariantComponent = React.ComponentType; + +const getVariantComponent = ( + namespace: TypographyNamespace, + variant: TypographyVariant, +): VariantComponent => { + return (TachTypography[namespace] as unknown as Record)[variant]; +}; + +interface MarkdownArgs { + namespace: TypographyNamespace; + variant: TypographyVariant; + color: TypographyColor; + weight: TypographyWeight; + markdownEnabled: boolean; + content: string; + href: string; + titleLevel: 1 | 2 | 3 | 4 | 5; +} + +const renderMarkdownTypography = (args: MarkdownArgs) => { + const Component = getVariantComponent(args.namespace, args.variant); + + const componentProps: VariantComponentProps = { + color: args.color, + weight: args.weight, + markdownEnabled: args.markdownEnabled, + }; + + if (args.namespace === "Link") { + componentProps.href = args.href; + } + + if (args.namespace === "Title") { + componentProps.level = args.titleLevel; + } + + return ( +

+ {args.content} +
+ ); +}; + +const meta: Meta = { + title: "TachTypography/Markdown", + tags: ["autodocs"], + render: renderMarkdownTypography, + args: { + namespace: "Text", + variant: "Body", + color: "primary", + weight: "normal", + markdownEnabled: true, + content: "**Bold** _italic_ ~~strike~~ `code` [Docs](https://example.com)", + href: "https://example.com", + titleLevel: 3, + }, + argTypes: { + namespace: { + control: "select", + options: ["Text", "Paragraph", "Link", "Title"], + }, + variant: { + control: "select", + options: TYPOGRAPHY_VARIANTS, + }, + color: { + control: "select", + options: TYPOGRAPHY_COLORS, + }, + weight: { + control: "inline-radio", + options: ["normal", "bold"], + }, + markdownEnabled: { + control: "boolean", + }, + content: { + control: "text", + }, + href: { + control: "text", + description: "Works for Link namespace", + }, + titleLevel: { + control: "inline-radio", + options: [1, 2, 3, 4, 5], + description: "Works for Title namespace", + }, + }, + parameters: { + docs: { + description: { + component: + "Markdown rendering in existing TachTypography components via the markdownEnabled prop.", + }, + }, + }, +}; + +export default meta; + +type Story = StoryObj; + +export const ReactMarkdown: Story = {}; + +export const MarkdownDisabled: Story = { + args: { + markdownEnabled: false, + content: "**Bold** _italic_ markdown is shown as plain text", + }, +}; + +export const AngularUsage: Story = { + render: () => ( +
+

Angular usage

+
+        
+{``}
+        
+      
+
+ ), +}; diff --git a/packages/tach-typography/src/stories/TachTypography.Reference.stories.tsx b/packages/tach-typography/src/stories/TachTypography.Reference.stories.tsx index d794324..500dd5f 100644 --- a/packages/tach-typography/src/stories/TachTypography.Reference.stories.tsx +++ b/packages/tach-typography/src/stories/TachTypography.Reference.stories.tsx @@ -67,6 +67,20 @@ export const PropsMatrix: Story = { tachTypographyClassName Merges with token classes + + markdownEnabled + boolean + markdownEnabled + [markdownEnabled] + Enables markdown rendering from content string + + + markdown + string + children string + [markdown] + Angular markdown source string + diff --git a/packages/tach-typography/src/styles/tach-typography.css b/packages/tach-typography/src/styles/tach-typography.css index 341acfd..8fecee7 100644 --- a/packages/tach-typography/src/styles/tach-typography.css +++ b/packages/tach-typography/src/styles/tach-typography.css @@ -88,6 +88,17 @@ .tach-typography--AppMediumSubtextUnderline, .ant-typography.tach-typography--AppMediumSubtextUnderline { font-family: Inter, sans-serif; font-size: 11px; font-weight: 400; line-height: 17px; text-decoration: underline; } +.tach-typography .tach-typography__md-link, +.ant-typography.tach-typography .tach-typography__md-link { + color: inherit; + text-decoration: underline; +} + +.tach-typography .tach-typography__md-code, +.ant-typography.tach-typography .tach-typography__md-code { + font-family: ui-monospace, SFMono-Regular, Menlo, monospace; +} + @media (max-width: 575px) { .tach-typography--AccentLargeTtl, .ant-typography.tach-typography--AccentLargeTtl {