@assistant-ui/react-markdown
Advanced tools
| import { describe, it, expect } from "vitest"; | ||
| import type { Element } from "hast"; | ||
| import { areNodesEqual } from "./memoization"; | ||
| const createNode = (overrides: Partial<Element> = {}): Element => ({ | ||
| type: "element", | ||
| tagName: "p", | ||
| properties: { className: "foo" }, | ||
| children: [], | ||
| ...overrides, | ||
| }); | ||
| describe("areNodesEqual", () => { | ||
| it("returns false if either node is undefined", () => { | ||
| expect(areNodesEqual(undefined, createNode())).toBe(false); | ||
| expect(areNodesEqual(createNode(), undefined)).toBe(false); | ||
| }); | ||
| it("ignores position when comparing properties", () => { | ||
| const prev = createNode({ properties: { className: "foo", position: 1 } }); | ||
| const next = createNode({ properties: { className: "foo", position: 2 } }); | ||
| expect(areNodesEqual(prev, next)).toBe(true); | ||
| }); | ||
| it("detects differences in children", () => { | ||
| const prev = createNode({ | ||
| children: [{ type: "text", value: "a" }] as any, | ||
| }); | ||
| const next = createNode({ | ||
| children: [{ type: "text", value: "b" }] as any, | ||
| }); | ||
| expect(areNodesEqual(prev, next)).toBe(false); | ||
| }); | ||
| }); |
| import classNames from "classnames"; | ||
| export const withDefaultProps = | ||
| <TProps extends { className?: string | undefined }>({ | ||
| className, | ||
| ...defaultProps | ||
| }: Partial<TProps>) => | ||
| ({ className: classNameProp, ...props }: TProps) => { | ||
| return { | ||
| className: classNames(className, classNameProp), | ||
| ...defaultProps, | ||
| ...props, | ||
| } as TProps; | ||
| }; |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"withDefaults.d.ts","sourceRoot":"","sources":["../../src/overrides/withDefaults.tsx"],"names":[],"mappings":"AAEA,eAAO,MAAM,gBAAgB,GAC1B,MAAM,SAAS;IAAE,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,EAAE,gCAGjD,OAAO,CAAC,MAAM,CAAC,MACjB,wCAAwC,MAAM,KAKxC,MACN,CAAC"} | ||
| {"version":3,"file":"withDefaults.d.ts","sourceRoot":"","sources":["../../src/overrides/withDefaults.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,gBAAgB,GAC1B,MAAM,SAAS;IAAE,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,EAAE,gCAGjD,OAAO,CAAC,MAAM,CAAC,MACjB,wCAAwC,MAAM,KAKxC,MACN,CAAC"} |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"withDefaults.js","sourceRoot":"","sources":["../../src/overrides/withDefaults.tsx"],"names":[],"mappings":"AAAA,OAAO,UAAU,MAAM,YAAY,CAAC;AAEpC,MAAM,CAAC,MAAM,gBAAgB,GAC3B,CAAoD,EAClD,SAAS,EACT,GAAG,YAAY,EACC,EAAE,EAAE,CACtB,CAAC,EAAE,SAAS,EAAE,aAAa,EAAE,GAAG,KAAK,EAAU,EAAE,EAAE;IACjD,OAAO;QACL,SAAS,EAAE,UAAU,CAAC,SAAS,EAAE,aAAa,CAAC;QAC/C,GAAG,YAAY;QACf,GAAG,KAAK;KACC,CAAC;AACd,CAAC,CAAC"} | ||
| {"version":3,"file":"withDefaults.js","sourceRoot":"","sources":["../../src/overrides/withDefaults.ts"],"names":[],"mappings":"AAAA,OAAO,UAAU,MAAM,YAAY,CAAC;AAEpC,MAAM,CAAC,MAAM,gBAAgB,GAC3B,CAAoD,EAClD,SAAS,EACT,GAAG,YAAY,EACC,EAAE,EAAE,CACtB,CAAC,EAAE,SAAS,EAAE,aAAa,EAAE,GAAG,KAAK,EAAU,EAAE,EAAE;IACjD,OAAO;QACL,SAAS,EAAE,UAAU,CAAC,SAAS,EAAE,aAAa,CAAC;QAC/C,GAAG,YAAY;QACf,GAAG,KAAK;KACC,CAAC;AACd,CAAC,CAAC"} |
+3
-3
| { | ||
| "name": "@assistant-ui/react-markdown", | ||
| "version": "0.12.3", | ||
| "version": "0.12.4", | ||
| "description": "Markdown rendering for assistant-ui", | ||
@@ -43,3 +43,3 @@ "keywords": [ | ||
| "peerDependencies": { | ||
| "@assistant-ui/react": "^0.12.9", | ||
| "@assistant-ui/react": "^0.12.11", | ||
| "@types/react": "*", | ||
@@ -59,3 +59,3 @@ "react": "^18 || ^19" | ||
| "vitest": "^4.0.18", | ||
| "@assistant-ui/react": "0.12.9", | ||
| "@assistant-ui/react": "0.12.11", | ||
| "@assistant-ui/x-buildutils": "0.0.1" | ||
@@ -62,0 +62,0 @@ }, |
| import { describe, it, expect } from "vitest"; | ||
| import type { Element } from "hast"; | ||
| import { areNodesEqual } from "./memoization"; | ||
| const createNode = (overrides: Partial<Element> = {}): Element => ({ | ||
| type: "element", | ||
| tagName: "p", | ||
| properties: { className: "foo" }, | ||
| children: [], | ||
| ...overrides, | ||
| }); | ||
| describe("areNodesEqual", () => { | ||
| it("returns false if either node is undefined", () => { | ||
| expect(areNodesEqual(undefined, createNode())).toBe(false); | ||
| expect(areNodesEqual(createNode(), undefined)).toBe(false); | ||
| }); | ||
| it("ignores position when comparing properties", () => { | ||
| const prev = createNode({ properties: { className: "foo", position: 1 } }); | ||
| const next = createNode({ properties: { className: "foo", position: 2 } }); | ||
| expect(areNodesEqual(prev, next)).toBe(true); | ||
| }); | ||
| it("detects differences in children", () => { | ||
| const prev = createNode({ | ||
| children: [{ type: "text", value: "a" }] as any, | ||
| }); | ||
| const next = createNode({ | ||
| children: [{ type: "text", value: "b" }] as any, | ||
| }); | ||
| expect(areNodesEqual(prev, next)).toBe(false); | ||
| }); | ||
| }); |
| import classNames from "classnames"; | ||
| export const withDefaultProps = | ||
| <TProps extends { className?: string | undefined }>({ | ||
| className, | ||
| ...defaultProps | ||
| }: Partial<TProps>) => | ||
| ({ className: classNameProp, ...props }: TProps) => { | ||
| return { | ||
| className: classNames(className, classNameProp), | ||
| ...defaultProps, | ||
| ...props, | ||
| } as TProps; | ||
| }; |