@chayns-components/core 5.5.27 → 5.5.29
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +875 -64
- package/lib/cjs/components/copyable-content/CopyableContent.js +4 -3
- package/lib/cjs/components/copyable-content/CopyableContent.js.map +1 -1
- package/lib/cjs/components/copyable-content/CopyableContent.test.js +14 -0
- package/lib/cjs/components/copyable-content/CopyableContent.test.js.map +1 -1
- package/lib/cjs/components/copyable-content/copyableContentClipboard.js +6 -5
- package/lib/cjs/components/copyable-content/copyableContentClipboard.js.map +1 -1
- package/lib/cjs/components/copyable-content/copyableContentClipboard.test.js +6 -0
- package/lib/cjs/components/copyable-content/copyableContentClipboard.test.js.map +1 -1
- package/lib/esm/components/copyable-content/CopyableContent.js +4 -3
- package/lib/esm/components/copyable-content/CopyableContent.js.map +1 -1
- package/lib/esm/components/copyable-content/CopyableContent.test.js +14 -0
- package/lib/esm/components/copyable-content/CopyableContent.test.js.map +1 -1
- package/lib/esm/components/copyable-content/copyableContentClipboard.js +6 -5
- package/lib/esm/components/copyable-content/copyableContentClipboard.js.map +1 -1
- package/lib/esm/components/copyable-content/copyableContentClipboard.test.js +6 -0
- package/lib/esm/components/copyable-content/copyableContentClipboard.test.js.map +1 -1
- package/lib/types/components/copyable-content/CopyableContent.d.ts +4 -0
- package/lib/types/components/copyable-content/copyableContentClipboard.d.ts +1 -1
- package/package.json +4 -4
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"copyableContentClipboard.test.js","names":["formatStringToHtml","afterEach","describe","expect","it","vi","copyableContentToClipboard","source","readBlob","blob","Promise","resolve","reject","reader","FileReader","onerror","error","onload","result","readAsText","
|
|
1
|
+
{"version":3,"file":"copyableContentClipboard.test.js","names":["formatStringToHtml","afterEach","describe","expect","it","vi","copyableContentToClipboard","source","readBlob","blob","Promise","resolve","reject","reader","FileReader","onerror","error","onload","result","readAsText","write","spyOn","navigator","clipboard","mockResolvedValue","html","clipboardItem","mock","calls","getType","resolves","toContain","restoreAllMocks","unstubAllGlobals","item","Object","keys","items","toEqual","toBe","mockRejectedValueOnce","Error","mockResolvedValueOnce","writeText","toHaveBeenCalledTimes","not","toHaveBeenCalled","mockRejectedValue","toHaveBeenCalledWith","stubGlobal","undefined"],"sources":["../../../../src/components/copyable-content/copyableContentClipboard.test.ts"],"sourcesContent":["import { formatStringToHtml } from '@chayns-components/format';\nimport { afterEach, describe, expect, it, vi } from 'vitest';\nimport { copyableContentToClipboard } from './copyableContentClipboard';\n\nconst source = '# Heading\\n\\n[Link](https://example.com)';\n\nconst readBlob = (blob: Blob) =>\n new Promise<string>((resolve, reject) => {\n const reader = new FileReader();\n reader.onerror = () => reject(reader.error);\n reader.onload = () => resolve(reader.result as string);\n reader.readAsText(blob);\n });\n\ndescribe('copyableContentToClipboard', () => {\n it('transforms the generated HTML before copying', async () => {\n const write = vi.spyOn(navigator.clipboard, 'write').mockResolvedValue();\n\n await copyableContentToClipboard('source', (html) => `${html}<p>Styled</p>`);\n\n const clipboardItem = write.mock.calls[0][0][0];\n\n await expect(readBlob(await clipboardItem.getType('text/html'))).resolves.toContain(\n '<p>Styled</p>',\n );\n });\n\n afterEach(() => {\n vi.restoreAllMocks();\n vi.unstubAllGlobals();\n });\n\n it('writes readable plain text first and safe HTML second', async () => {\n const write = vi.spyOn(navigator.clipboard, 'write').mockResolvedValue();\n\n await copyableContentToClipboard(source);\n\n const item = write.mock.calls[0][0][0] as unknown as ClipboardItem & {\n items: Record<string, Blob>;\n };\n expect(Object.keys(item.items)).toEqual(['text/plain', 'text/html']);\n await expect(readBlob(await item.getType('text/plain'))).resolves.toBe('Heading\\n\\nLink');\n await expect(readBlob(await item.getType('text/html'))).resolves.toBe(\n formatStringToHtml(source).html,\n );\n });\n\n it('uses a plain ClipboardItem after a rejected rich write', async () => {\n const write = vi\n .spyOn(navigator.clipboard, 'write')\n .mockRejectedValueOnce(new Error('denied'))\n .mockResolvedValueOnce();\n const writeText = vi.spyOn(navigator.clipboard, 'writeText').mockResolvedValue();\n\n await copyableContentToClipboard(source);\n\n expect(write).toHaveBeenCalledTimes(2);\n expect(writeText).not.toHaveBeenCalled();\n const item = write.mock.calls[1][0][0] as unknown as ClipboardItem & {\n items: Record<string, Blob>;\n };\n expect(Object.keys(item.items)).toEqual(['text/plain']);\n await expect(readBlob(await item.getType('text/plain'))).resolves.toBe('Heading\\n\\nLink');\n });\n\n it('uses writeText after all ClipboardItem writes fail', async () => {\n vi.spyOn(navigator.clipboard, 'write').mockRejectedValue(new Error('denied'));\n const writeText = vi.spyOn(navigator.clipboard, 'writeText').mockResolvedValue();\n\n await copyableContentToClipboard(source);\n\n expect(writeText).toHaveBeenCalledWith('Heading\\n\\nLink');\n });\n\n it('uses writeText when ClipboardItem is unavailable', async () => {\n vi.stubGlobal('ClipboardItem', undefined);\n const writeText = vi.spyOn(navigator.clipboard, 'writeText').mockResolvedValue();\n\n await copyableContentToClipboard(source);\n\n expect(writeText).toHaveBeenCalledWith('Heading\\n\\nLink');\n });\n});\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -21,6 +21,10 @@ export type CopyableContentProps = {
|
|
|
21
21
|
* The height of the content in its collapsed state.
|
|
22
22
|
*/
|
|
23
23
|
collapsedHeight?: number;
|
|
24
|
+
/**
|
|
25
|
+
* Transforms the generated HTML before it is written to the clipboard.
|
|
26
|
+
*/
|
|
27
|
+
transformClipboardHtml?: (html: string) => string;
|
|
24
28
|
};
|
|
25
29
|
declare const CopyableContent: FC<CopyableContentProps>;
|
|
26
30
|
export default CopyableContent;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const copyableContentToClipboard: (source: string) => Promise<void>;
|
|
1
|
+
export declare const copyableContentToClipboard: (source: string, transformHtml?: (html: string) => string) => Promise<void>;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@chayns-components/core",
|
|
3
|
-
"version": "5.5.
|
|
3
|
+
"version": "5.5.29",
|
|
4
4
|
"description": "A set of beautiful React components for developing your own applications with chayns.",
|
|
5
5
|
"sideEffects": false,
|
|
6
6
|
"browserslist": [
|
|
@@ -75,8 +75,8 @@
|
|
|
75
75
|
"vitest": "^1.6.1"
|
|
76
76
|
},
|
|
77
77
|
"dependencies": {
|
|
78
|
-
"@chayns-components/format": "^5.5.
|
|
79
|
-
"@chayns-components/textstring": "^5.5.
|
|
78
|
+
"@chayns-components/format": "^5.5.28",
|
|
79
|
+
"@chayns-components/textstring": "^5.5.28",
|
|
80
80
|
"@chayns/colors": "^2.0.2",
|
|
81
81
|
"@chayns/uac-service": "~0.0.62",
|
|
82
82
|
"clsx": "^2.1.1",
|
|
@@ -93,5 +93,5 @@
|
|
|
93
93
|
"publishConfig": {
|
|
94
94
|
"access": "public"
|
|
95
95
|
},
|
|
96
|
-
"gitHead": "
|
|
96
|
+
"gitHead": "f8e901fa5342d0b0b294c12955bc68dddb31bcb8"
|
|
97
97
|
}
|