@chayns-components/core 5.5.14 → 5.5.21
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/lib/cjs/components/copyable-content/CopyableContent.js +18 -12
- package/lib/cjs/components/copyable-content/CopyableContent.js.map +1 -1
- package/lib/cjs/components/copyable-content/CopyableContent.styles.js +2 -1
- package/lib/cjs/components/copyable-content/CopyableContent.styles.js.map +1 -1
- package/lib/cjs/components/copyable-content/CopyableContent.test.js +26 -17
- package/lib/cjs/components/copyable-content/CopyableContent.test.js.map +1 -1
- package/lib/cjs/components/copyable-content/copyableContentClipboard.js +45 -28
- package/lib/cjs/components/copyable-content/copyableContentClipboard.js.map +1 -1
- package/lib/cjs/components/copyable-content/copyableContentClipboard.test.js +13 -11
- package/lib/cjs/components/copyable-content/copyableContentClipboard.test.js.map +1 -1
- package/lib/cjs/components/sharing-context-menu/SharingContextMenu.js +11 -12
- package/lib/cjs/components/sharing-context-menu/SharingContextMenu.js.map +1 -1
- package/lib/cjs/components/sharing-context-menu/SharingContextMenu.test.js +48 -0
- package/lib/cjs/components/sharing-context-menu/SharingContextMenu.test.js.map +1 -0
- package/lib/cjs/constants/textStrings.js +0 -4
- package/lib/cjs/constants/textStrings.js.map +1 -1
- package/lib/cjs/utils/sharingBar.js +14 -17
- package/lib/cjs/utils/sharingBar.js.map +1 -1
- package/lib/esm/components/copyable-content/CopyableContent.js +19 -13
- package/lib/esm/components/copyable-content/CopyableContent.js.map +1 -1
- package/lib/esm/components/copyable-content/CopyableContent.styles.js +2 -1
- package/lib/esm/components/copyable-content/CopyableContent.styles.js.map +1 -1
- package/lib/esm/components/copyable-content/CopyableContent.test.js +24 -16
- package/lib/esm/components/copyable-content/CopyableContent.test.js.map +1 -1
- package/lib/esm/components/copyable-content/copyableContentClipboard.js +41 -28
- package/lib/esm/components/copyable-content/copyableContentClipboard.js.map +1 -1
- package/lib/esm/components/copyable-content/copyableContentClipboard.test.js +13 -11
- package/lib/esm/components/copyable-content/copyableContentClipboard.test.js.map +1 -1
- package/lib/esm/components/sharing-context-menu/SharingContextMenu.js +11 -12
- package/lib/esm/components/sharing-context-menu/SharingContextMenu.js.map +1 -1
- package/lib/esm/components/sharing-context-menu/SharingContextMenu.test.js +45 -0
- package/lib/esm/components/sharing-context-menu/SharingContextMenu.test.js.map +1 -0
- package/lib/esm/constants/textStrings.js +0 -4
- package/lib/esm/constants/textStrings.js.map +1 -1
- package/lib/esm/utils/sharingBar.js +15 -18
- package/lib/esm/utils/sharingBar.js.map +1 -1
- package/lib/types/components/copyable-content/CopyableContent.d.ts +0 -1
- package/lib/types/components/sharing-context-menu/SharingContextMenu.d.ts +16 -0
- package/lib/types/constants/textStrings.d.ts +0 -4
- package/package.json +5 -7
- package/LICENSE +0 -21
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SharingContextMenu.js","names":["_chaynsApi","require","_react","_interopRequireWildcard","_sharingBar","_environment","_sharingBar2","_ContextMenu","_interopRequireDefault","e","__esModule","default","t","WeakMap","r","n","o","i","f","__proto__","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","_extends","assign","bind","arguments","length","apply","SharingContextMenu","forwardRef","link","children","shouldEnableKeyboardHighlighting","contextMenuProps","ref","isTouch","useIsTouch","handleImageDownload","useCallback","shareWithUrl","SHAREPROVIDER","url","replace","encodeURIComponent","getSite","color","handleShare","key","trim","shareWithApp","copyToClipboard","contextMenuItems","icons","onClick","text","createElement","items","displayName","_default","exports"],"sources":["../../../../src/components/sharing-context-menu/SharingContextMenu.tsx"],"sourcesContent":["import { getSite } from 'chayns-api';\nimport React, { forwardRef, useCallback } from 'react';\nimport { SHAREPROVIDER } from '../../constants/sharingBar';\nimport { useIsTouch } from '../../utils/environment';\nimport { copyToClipboard, shareWithApp, shareWithUrl } from '../../utils/sharingBar';\nimport ContextMenu from '../context-menu/ContextMenu';\nimport { ContextMenuProps, ContextMenuRef } from '../context-menu/ContextMenu.types';\n\nexport type SharingContextMenuProps = {\n /**\n * The link that should be shared.\n */\n link: string;\n /**\n * Enables keyboard-only focus highlighting for the context menu trigger.\n */\n shouldEnableKeyboardHighlighting?: boolean;\n} & Omit<ContextMenuProps, 'items' | 'shouldEnableKeyboardHighlighting'>;\n\nconst SharingContextMenu = forwardRef<ContextMenuRef, SharingContextMenuProps>(\n ({ link, children, shouldEnableKeyboardHighlighting, ...contextMenuProps }, ref) => {\n const isTouch = useIsTouch();\n\n const handleImageDownload = useCallback(() => {\n shareWithUrl(\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n SHAREPROVIDER[5].url\n .replace('{url}', encodeURIComponent(link))\n .replace('{linkText}', 'Teilen')\n .replace('{color}', getSite().color.replace('#', '')),\n );\n }, [link]);\n\n const handleShare = useCallback(\n (key: string) => {\n switch (key) {\n case 'whatsapp':\n shareWithUrl(\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n SHAREPROVIDER[0].url.replace(\n '{url}',\n encodeURIComponent(`${link}`.trim()),\n ),\n );\n break;\n case 'facebook':\n shareWithUrl(\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n SHAREPROVIDER[3].url.replace('{url}', encodeURIComponent(link)),\n );\n break;\n case 'twitter':\n shareWithUrl(\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n SHAREPROVIDER[4].url\n .replace('{url}', encodeURIComponent(link))\n .replace('{linkText}', ''),\n );\n break;\n case 'mail':\n if (isTouch) {\n shareWithApp(`${link}`.trim());\n } else {\n shareWithUrl(\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n SHAREPROVIDER[2].url.replace(\n '{url}',\n encodeURIComponent(`${link}`.trim()),\n ),\n );\n }\n break;\n case 'copy':\n copyToClipboard(link);\n break;\n default:\n break;\n }\n },\n [link, isTouch],\n );\n\n const contextMenuItems = [\n {\n icons: ['fa fa-copy'],\n key: 'copy',\n onClick: () => handleShare('copy'),\n text: 'Zwischenablage',\n },\n {\n icons: ['fa-solid fa-brands fa-whatsapp'],\n key: 'whatsapp',\n onClick: () => handleShare('whatsapp'),\n text: 'Whatsapp',\n },\n {\n icons: ['fa-solid fa-brands fa-facebook-f'],\n key: 'facebook',\n onClick: () => handleShare('facebook'),\n text: 'Facebook',\n },\n {\n icons: ['fa-solid fa-brands fa-x-twitter'],\n key: 'twitter',\n onClick: () => handleShare('twitter'),\n text: 'X',\n },\n {\n icons: ['fa fa-envelope'],\n key: 'mail',\n onClick: () => handleShare('mail'),\n text: 'Mail',\n },\n {\n icons: ['fa fa-qrcode'],\n key: 'callingCode',\n onClick: handleImageDownload,\n text: 'Calling Code herunterladen',\n },\n ];\n\n return (\n // eslint-disable-next-line react/jsx-props-no-spreading\n <ContextMenu\n items={contextMenuItems}\n ref={ref}\n shouldEnableKeyboardHighlighting={shouldEnableKeyboardHighlighting}\n {...contextMenuProps}\n >\n {children}\n </ContextMenu>\n );\n },\n);\n\nSharingContextMenu.displayName = 'SharingContextMenu';\n\nexport default SharingContextMenu;\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"SharingContextMenu.js","names":["_chaynsApi","require","_react","_interopRequireWildcard","_sharingBar","_environment","_sharingBar2","_ContextMenu","_interopRequireDefault","e","__esModule","default","t","WeakMap","r","n","o","i","f","__proto__","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","_extends","assign","bind","arguments","length","apply","SharingContextMenu","forwardRef","link","children","shouldEnableKeyboardHighlighting","shouldShowCallingCodeAction","shouldShowCopyAction","contextMenuProps","ref","isTouch","useIsTouch","handleImageDownload","useCallback","shareWithUrl","SHAREPROVIDER","url","replace","encodeURIComponent","getSite","color","handleShare","key","trim","shareWithApp","copyToClipboard","contextMenuItems","icons","onClick","text","createElement","items","displayName","_default","exports"],"sources":["../../../../src/components/sharing-context-menu/SharingContextMenu.tsx"],"sourcesContent":["import { getSite } from 'chayns-api';\nimport React, { forwardRef, useCallback } from 'react';\nimport { SHAREPROVIDER } from '../../constants/sharingBar';\nimport { useIsTouch } from '../../utils/environment';\nimport { copyToClipboard, shareWithApp, shareWithUrl } from '../../utils/sharingBar';\nimport ContextMenu from '../context-menu/ContextMenu';\nimport { ContextMenuProps, ContextMenuRef } from '../context-menu/ContextMenu.types';\n\nexport type SharingContextMenuProps = {\n /**\n * The link that should be shared.\n */\n link: string;\n /**\n * Shows the action that copies the shared link to the clipboard.\n */\n shouldShowCopyAction?: boolean;\n /**\n * Shows the action that downloads a calling-code image.\n */\n shouldShowCallingCodeAction?: boolean;\n /**\n * Enables keyboard-only focus highlighting for the context menu trigger.\n */\n shouldEnableKeyboardHighlighting?: boolean;\n} & Omit<ContextMenuProps, 'items' | 'shouldEnableKeyboardHighlighting'>;\n\nconst SharingContextMenu = forwardRef<ContextMenuRef, SharingContextMenuProps>(\n (\n {\n link,\n children,\n shouldEnableKeyboardHighlighting,\n shouldShowCallingCodeAction = true,\n shouldShowCopyAction = true,\n ...contextMenuProps\n },\n ref,\n ) => {\n const isTouch = useIsTouch();\n\n const handleImageDownload = useCallback(() => {\n shareWithUrl(\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n SHAREPROVIDER[5].url\n .replace('{url}', encodeURIComponent(link))\n .replace('{linkText}', 'Teilen')\n .replace('{color}', getSite().color.replace('#', '')),\n );\n }, [link]);\n\n const handleShare = useCallback(\n (key: string) => {\n switch (key) {\n case 'whatsapp':\n shareWithUrl(\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n SHAREPROVIDER[0].url.replace(\n '{url}',\n encodeURIComponent(`${link}`.trim()),\n ),\n );\n break;\n case 'facebook':\n shareWithUrl(\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n SHAREPROVIDER[3].url.replace('{url}', encodeURIComponent(link)),\n );\n break;\n case 'twitter':\n shareWithUrl(\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n SHAREPROVIDER[4].url\n .replace('{url}', encodeURIComponent(link))\n .replace('{linkText}', ''),\n );\n break;\n case 'mail':\n if (isTouch) {\n shareWithApp(`${link}`.trim());\n } else {\n shareWithUrl(\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n SHAREPROVIDER[2].url.replace(\n '{url}',\n encodeURIComponent(`${link}`.trim()),\n ),\n );\n }\n break;\n case 'copy':\n copyToClipboard(link);\n break;\n default:\n break;\n }\n },\n [link, isTouch],\n );\n\n const contextMenuItems = [\n ...(shouldShowCopyAction\n ? [\n {\n icons: ['fa fa-copy'],\n key: 'copy',\n onClick: () => handleShare('copy'),\n text: 'Zwischenablage',\n },\n ]\n : []),\n {\n icons: ['fa-solid fa-brands fa-whatsapp'],\n key: 'whatsapp',\n onClick: () => handleShare('whatsapp'),\n text: 'Whatsapp',\n },\n {\n icons: ['fa-solid fa-brands fa-facebook-f'],\n key: 'facebook',\n onClick: () => handleShare('facebook'),\n text: 'Facebook',\n },\n {\n icons: ['fa-solid fa-brands fa-x-twitter'],\n key: 'twitter',\n onClick: () => handleShare('twitter'),\n text: 'X',\n },\n {\n icons: ['fa fa-envelope'],\n key: 'mail',\n onClick: () => handleShare('mail'),\n text: 'Mail',\n },\n ...(shouldShowCallingCodeAction\n ? [\n {\n icons: ['fa fa-qrcode'],\n key: 'callingCode',\n onClick: handleImageDownload,\n text: 'Calling Code herunterladen',\n },\n ]\n : []),\n ];\n\n return (\n <ContextMenu\n items={contextMenuItems}\n ref={ref}\n shouldEnableKeyboardHighlighting={shouldEnableKeyboardHighlighting}\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...contextMenuProps}\n >\n {children}\n </ContextMenu>\n );\n },\n);\n\nSharingContextMenu.displayName = 'SharingContextMenu';\n\nexport default SharingContextMenu;\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _react = require("@testing-library/react");
|
|
4
|
+
var _react2 = _interopRequireDefault(require("react"));
|
|
5
|
+
var _vitest = require("vitest");
|
|
6
|
+
var _SharingContextMenu = _interopRequireDefault(require("./SharingContextMenu"));
|
|
7
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
8
|
+
_vitest.vi.mock('chayns-api', () => ({
|
|
9
|
+
getSite: () => ({
|
|
10
|
+
color: '#000000'
|
|
11
|
+
})
|
|
12
|
+
}));
|
|
13
|
+
_vitest.vi.mock('../../utils/environment', () => ({
|
|
14
|
+
useIsTouch: () => false
|
|
15
|
+
}));
|
|
16
|
+
_vitest.vi.mock('../context-menu/ContextMenu', () => ({
|
|
17
|
+
default: ({
|
|
18
|
+
children,
|
|
19
|
+
items
|
|
20
|
+
}) => /*#__PURE__*/_react2.default.createElement("div", {
|
|
21
|
+
"data-item-keys": items.map(item => item.key).join(',')
|
|
22
|
+
}, children)
|
|
23
|
+
}));
|
|
24
|
+
(0, _vitest.describe)('SharingContextMenu', () => {
|
|
25
|
+
(0, _vitest.it)('keeps copy and calling-code actions enabled by default', () => {
|
|
26
|
+
const {
|
|
27
|
+
container
|
|
28
|
+
} = (0, _react.render)(/*#__PURE__*/_react2.default.createElement(_SharingContextMenu.default, {
|
|
29
|
+
link: "https://example.com"
|
|
30
|
+
}, /*#__PURE__*/_react2.default.createElement("button", {
|
|
31
|
+
type: "button"
|
|
32
|
+
}, "Share")));
|
|
33
|
+
(0, _vitest.expect)(container.firstChild.getAttribute('data-item-keys')).toBe('copy,whatsapp,facebook,twitter,mail,callingCode');
|
|
34
|
+
});
|
|
35
|
+
(0, _vitest.it)('can hide copy and calling-code actions for dedicated content actions', () => {
|
|
36
|
+
const {
|
|
37
|
+
container
|
|
38
|
+
} = (0, _react.render)(/*#__PURE__*/_react2.default.createElement(_SharingContextMenu.default, {
|
|
39
|
+
link: "https://example.com",
|
|
40
|
+
shouldShowCallingCodeAction: false,
|
|
41
|
+
shouldShowCopyAction: false
|
|
42
|
+
}, /*#__PURE__*/_react2.default.createElement("button", {
|
|
43
|
+
type: "button"
|
|
44
|
+
}, "Share")));
|
|
45
|
+
(0, _vitest.expect)(container.firstChild.getAttribute('data-item-keys')).toBe('whatsapp,facebook,twitter,mail');
|
|
46
|
+
});
|
|
47
|
+
});
|
|
48
|
+
//# sourceMappingURL=SharingContextMenu.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SharingContextMenu.test.js","names":["_react","require","_react2","_interopRequireDefault","_vitest","_SharingContextMenu","e","__esModule","default","vi","mock","getSite","color","useIsTouch","children","items","createElement","map","item","key","join","describe","it","container","render","link","type","expect","firstChild","getAttribute","toBe","shouldShowCallingCodeAction","shouldShowCopyAction"],"sources":["../../../../src/components/sharing-context-menu/SharingContextMenu.test.tsx"],"sourcesContent":["import { render } from '@testing-library/react';\nimport React, { ReactNode } from 'react';\nimport { describe, expect, it, vi } from 'vitest';\nimport SharingContextMenu from './SharingContextMenu';\n\nvi.mock('chayns-api', () => ({\n getSite: () => ({ color: '#000000' }),\n}));\n\nvi.mock('../../utils/environment', () => ({\n useIsTouch: () => false,\n}));\n\nvi.mock('../context-menu/ContextMenu', () => ({\n default: ({ children, items }: { children: ReactNode; items: Array<{ key: string }> }) => (\n <div data-item-keys={items.map((item) => item.key).join(',')}>{children}</div>\n ),\n}));\n\ndescribe('SharingContextMenu', () => {\n it('keeps copy and calling-code actions enabled by default', () => {\n const { container } = render(\n <SharingContextMenu link=\"https://example.com\">\n <button type=\"button\">Share</button>\n </SharingContextMenu>,\n );\n\n expect((container.firstChild as HTMLElement).getAttribute('data-item-keys')).toBe(\n 'copy,whatsapp,facebook,twitter,mail,callingCode',\n );\n });\n\n it('can hide copy and calling-code actions for dedicated content actions', () => {\n const { container } = render(\n <SharingContextMenu\n link=\"https://example.com\"\n shouldShowCallingCodeAction={false}\n shouldShowCopyAction={false}\n >\n <button type=\"button\">Share</button>\n </SharingContextMenu>,\n );\n\n expect((container.firstChild as HTMLElement).getAttribute('data-item-keys')).toBe(\n 'whatsapp,facebook,twitter,mail',\n );\n });\n});\n"],"mappings":";;AAAA,IAAAA,MAAA,GAAAC,OAAA;AACA,IAAAC,OAAA,GAAAC,sBAAA,CAAAF,OAAA;AACA,IAAAG,OAAA,GAAAH,OAAA;AACA,IAAAI,mBAAA,GAAAF,sBAAA,CAAAF,OAAA;AAAsD,SAAAE,uBAAAG,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAEtDG,UAAE,CAACC,IAAI,CAAC,YAAY,EAAE,OAAO;EACzBC,OAAO,EAAEA,CAAA,MAAO;IAAEC,KAAK,EAAE;EAAU,CAAC;AACxC,CAAC,CAAC,CAAC;AAEHH,UAAE,CAACC,IAAI,CAAC,yBAAyB,EAAE,OAAO;EACtCG,UAAU,EAAEA,CAAA,KAAM;AACtB,CAAC,CAAC,CAAC;AAEHJ,UAAE,CAACC,IAAI,CAAC,6BAA6B,EAAE,OAAO;EAC1CF,OAAO,EAAEA,CAAC;IAAEM,QAAQ;IAAEC;EAA8D,CAAC,kBACjFb,OAAA,CAAAM,OAAA,CAAAQ,aAAA;IAAK,kBAAgBD,KAAK,CAACE,GAAG,CAAEC,IAAI,IAAKA,IAAI,CAACC,GAAG,CAAC,CAACC,IAAI,CAAC,GAAG;EAAE,GAAEN,QAAc;AAErF,CAAC,CAAC,CAAC;AAEH,IAAAO,gBAAQ,EAAC,oBAAoB,EAAE,MAAM;EACjC,IAAAC,UAAE,EAAC,wDAAwD,EAAE,MAAM;IAC/D,MAAM;MAAEC;IAAU,CAAC,GAAG,IAAAC,aAAM,eACxBtB,OAAA,CAAAM,OAAA,CAAAQ,aAAA,CAACX,mBAAA,CAAAG,OAAkB;MAACiB,IAAI,EAAC;IAAqB,gBAC1CvB,OAAA,CAAAM,OAAA,CAAAQ,aAAA;MAAQU,IAAI,EAAC;IAAQ,GAAC,OAAa,CACnB,CACxB,CAAC;IAED,IAAAC,cAAM,EAAEJ,SAAS,CAACK,UAAU,CAAiBC,YAAY,CAAC,gBAAgB,CAAC,CAAC,CAACC,IAAI,CAC7E,iDACJ,CAAC;EACL,CAAC,CAAC;EAEF,IAAAR,UAAE,EAAC,sEAAsE,EAAE,MAAM;IAC7E,MAAM;MAAEC;IAAU,CAAC,GAAG,IAAAC,aAAM,eACxBtB,OAAA,CAAAM,OAAA,CAAAQ,aAAA,CAACX,mBAAA,CAAAG,OAAkB;MACfiB,IAAI,EAAC,qBAAqB;MAC1BM,2BAA2B,EAAE,KAAM;MACnCC,oBAAoB,EAAE;IAAM,gBAE5B9B,OAAA,CAAAM,OAAA,CAAAQ,aAAA;MAAQU,IAAI,EAAC;IAAQ,GAAC,OAAa,CACnB,CACxB,CAAC;IAED,IAAAC,cAAM,EAAEJ,SAAS,CAACK,UAAU,CAAiBC,YAAY,CAAC,gBAAgB,CAAC,CAAC,CAACC,IAAI,CAC7E,gCACJ,CAAC;EACL,CAAC,CAAC;AACN,CAAC,CAAC","ignoreList":[]}
|
|
@@ -55,10 +55,6 @@ var _default = exports.default = {
|
|
|
55
55
|
stringName: 'txt_chayns_components_core_components_copyableContent_share',
|
|
56
56
|
fallback: 'Teilen'
|
|
57
57
|
},
|
|
58
|
-
copied: {
|
|
59
|
-
stringName: 'txt_chayns_components_core_components_copyableContent_copied',
|
|
60
|
-
fallback: 'Kopiert'
|
|
61
|
-
},
|
|
62
58
|
copyFailed: {
|
|
63
59
|
stringName: 'txt_chayns_components_core_components_copyableContent_copyFailed',
|
|
64
60
|
fallback: 'Kopieren fehlgeschlagen'
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"textStrings.js","names":["components","filter","filterContent","input","placeholder","stringName","fallback","sort","filterButtons","all","truncation","less","more","fileItem","download","remove","copyableContent","copy","share","
|
|
1
|
+
{"version":3,"file":"textStrings.js","names":["components","filter","filterContent","input","placeholder","stringName","fallback","sort","filterButtons","all","truncation","less","more","fileItem","download","remove","copyableContent","copy","share","copyFailed"],"sources":["../../../src/constants/textStrings.ts"],"sourcesContent":["export default {\n components: {\n filter: {\n filterContent: {\n input: {\n placeholder: {\n stringName:\n 'txt_chayns_components_core_components_filter_filterContent_input_placeholder',\n fallback: 'Suche',\n },\n },\n sort: {\n stringName: 'txt_chayns_components_core_components_filter_filterContent_sort',\n fallback: 'Sortierung',\n },\n },\n },\n filterButtons: {\n all: {\n stringName: 'txt_chayns_components_core_components_filterButtons_all',\n fallback: 'Alle',\n },\n },\n truncation: {\n less: {\n stringName: 'txt_chayns_components_core_components_truncation_less',\n fallback: 'Weniger',\n },\n more: {\n stringName: 'txt_chayns_components_core_components_truncation_more',\n fallback: 'Mehr',\n },\n },\n fileItem: {\n download: {\n stringName: 'txt_chayns_components_core_components_fileItem_download',\n fallback: 'Download',\n },\n remove: {\n stringName: 'txt_chayns_components_core_components_fileItem_remove',\n fallback: 'Entfernen',\n },\n },\n copyableContent: {\n copy: {\n stringName: 'txt_chayns_components_core_components_copyableContent_copy',\n fallback: 'Kopieren',\n },\n share: {\n stringName: 'txt_chayns_components_core_components_copyableContent_share',\n fallback: 'Teilen',\n },\n copyFailed: {\n stringName: 'txt_chayns_components_core_components_copyableContent_copyFailed',\n fallback: 'Kopieren fehlgeschlagen',\n },\n },\n },\n} as const;\n"],"mappings":";;;;;;iCAAe;EACXA,UAAU,EAAE;IACRC,MAAM,EAAE;MACJC,aAAa,EAAE;QACXC,KAAK,EAAE;UACHC,WAAW,EAAE;YACTC,UAAU,EACN,8EAA8E;YAClFC,QAAQ,EAAE;UACd;QACJ,CAAC;QACDC,IAAI,EAAE;UACFF,UAAU,EAAE,iEAAiE;UAC7EC,QAAQ,EAAE;QACd;MACJ;IACJ,CAAC;IACDE,aAAa,EAAE;MACXC,GAAG,EAAE;QACDJ,UAAU,EAAE,yDAAyD;QACrEC,QAAQ,EAAE;MACd;IACJ,CAAC;IACDI,UAAU,EAAE;MACRC,IAAI,EAAE;QACFN,UAAU,EAAE,uDAAuD;QACnEC,QAAQ,EAAE;MACd,CAAC;MACDM,IAAI,EAAE;QACFP,UAAU,EAAE,uDAAuD;QACnEC,QAAQ,EAAE;MACd;IACJ,CAAC;IACDO,QAAQ,EAAE;MACNC,QAAQ,EAAE;QACNT,UAAU,EAAE,yDAAyD;QACrEC,QAAQ,EAAE;MACd,CAAC;MACDS,MAAM,EAAE;QACJV,UAAU,EAAE,uDAAuD;QACnEC,QAAQ,EAAE;MACd;IACJ,CAAC;IACDU,eAAe,EAAE;MACbC,IAAI,EAAE;QACFZ,UAAU,EAAE,4DAA4D;QACxEC,QAAQ,EAAE;MACd,CAAC;MACDY,KAAK,EAAE;QACHb,UAAU,EAAE,6DAA6D;QACzEC,QAAQ,EAAE;MACd,CAAC;MACDa,UAAU,EAAE;QACRd,UAAU,EAAE,kEAAkE;QAC9EC,QAAQ,EAAE;MACd;IACJ;EACJ;AACJ,CAAC","ignoreList":[]}
|
|
@@ -7,28 +7,25 @@ exports.shareWithUrl = exports.shareWithApp = exports.copyToClipboard = void 0;
|
|
|
7
7
|
var _chaynsApi = require("chayns-api");
|
|
8
8
|
const copyToClipboard = link => {
|
|
9
9
|
const aux = document.createElement('input');
|
|
10
|
-
const range = document.createRange();
|
|
11
10
|
aux.setAttribute('value', link);
|
|
12
11
|
aux.setAttribute('contenteditable', 'true');
|
|
13
12
|
aux.setAttribute('readonly', 'true');
|
|
14
13
|
document.body.appendChild(aux);
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
14
|
+
try {
|
|
15
|
+
const selection = window.getSelection();
|
|
16
|
+
if (!selection) {
|
|
17
|
+
return;
|
|
18
|
+
}
|
|
19
|
+
const range = document.createRange();
|
|
20
|
+
aux.select();
|
|
21
|
+
range.selectNodeContents(aux);
|
|
22
|
+
selection.removeAllRanges();
|
|
23
|
+
selection.addRange(range);
|
|
24
|
+
aux.setSelectionRange(0, 999999);
|
|
25
|
+
document.execCommand('copy');
|
|
26
|
+
} finally {
|
|
27
|
+
aux.remove();
|
|
20
28
|
}
|
|
21
|
-
s.removeAllRanges();
|
|
22
|
-
s.addRange(range);
|
|
23
|
-
aux.setSelectionRange(0, 999999);
|
|
24
|
-
document.execCommand('copy');
|
|
25
|
-
document.body.removeChild(aux);
|
|
26
|
-
void (0, _chaynsApi.createDialog)({
|
|
27
|
-
type: _chaynsApi.DialogType.TOAST,
|
|
28
|
-
showCloseIcon: true,
|
|
29
|
-
toastType: 1,
|
|
30
|
-
text: 'kopiert'
|
|
31
|
-
}).open();
|
|
32
29
|
};
|
|
33
30
|
exports.copyToClipboard = copyToClipboard;
|
|
34
31
|
const shareWithApp = link => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sharingBar.js","names":["_chaynsApi","require","copyToClipboard","link","aux","document","createElement","
|
|
1
|
+
{"version":3,"file":"sharingBar.js","names":["_chaynsApi","require","copyToClipboard","link","aux","document","createElement","setAttribute","body","appendChild","selection","window","getSelection","range","createRange","select","selectNodeContents","removeAllRanges","addRange","setSelectionRange","execCommand","remove","exports","shareWithApp","location","href","encodeURIComponent","shareWithUrl","startsWith","open","indexOf","openImage","items","url"],"sources":["../../../src/utils/sharingBar.ts"],"sourcesContent":["import { openImage } from 'chayns-api';\n\nexport const copyToClipboard = (link: string) => {\n const aux = document.createElement('input');\n aux.setAttribute('value', link);\n aux.setAttribute('contenteditable', 'true');\n aux.setAttribute('readonly', 'true');\n\n document.body.appendChild(aux);\n\n try {\n const selection = window.getSelection();\n\n if (!selection) {\n return;\n }\n\n const range = document.createRange();\n aux.select();\n range.selectNodeContents(aux);\n selection.removeAllRanges();\n selection.addRange(range);\n aux.setSelectionRange(0, 999999);\n document.execCommand('copy');\n } finally {\n aux.remove();\n }\n};\n\nexport const shareWithApp = (link: string) => {\n window.location.href = `mailto:?subject=&body=${encodeURIComponent(link)}`;\n};\n\nexport const shareWithUrl = (link: string) => {\n if (link.startsWith('mailto')) {\n window.open(link);\n } else if (link.indexOf('chaynsqrcodegenerator') > 0) {\n void openImage({ items: [{ url: link }] });\n } else {\n window.open(link, '_blank');\n }\n};\n"],"mappings":";;;;;;AAAA,IAAAA,UAAA,GAAAC,OAAA;AAEO,MAAMC,eAAe,GAAIC,IAAY,IAAK;EAC7C,MAAMC,GAAG,GAAGC,QAAQ,CAACC,aAAa,CAAC,OAAO,CAAC;EAC3CF,GAAG,CAACG,YAAY,CAAC,OAAO,EAAEJ,IAAI,CAAC;EAC/BC,GAAG,CAACG,YAAY,CAAC,iBAAiB,EAAE,MAAM,CAAC;EAC3CH,GAAG,CAACG,YAAY,CAAC,UAAU,EAAE,MAAM,CAAC;EAEpCF,QAAQ,CAACG,IAAI,CAACC,WAAW,CAACL,GAAG,CAAC;EAE9B,IAAI;IACA,MAAMM,SAAS,GAAGC,MAAM,CAACC,YAAY,CAAC,CAAC;IAEvC,IAAI,CAACF,SAAS,EAAE;MACZ;IACJ;IAEA,MAAMG,KAAK,GAAGR,QAAQ,CAACS,WAAW,CAAC,CAAC;IACpCV,GAAG,CAACW,MAAM,CAAC,CAAC;IACZF,KAAK,CAACG,kBAAkB,CAACZ,GAAG,CAAC;IAC7BM,SAAS,CAACO,eAAe,CAAC,CAAC;IAC3BP,SAAS,CAACQ,QAAQ,CAACL,KAAK,CAAC;IACzBT,GAAG,CAACe,iBAAiB,CAAC,CAAC,EAAE,MAAM,CAAC;IAChCd,QAAQ,CAACe,WAAW,CAAC,MAAM,CAAC;EAChC,CAAC,SAAS;IACNhB,GAAG,CAACiB,MAAM,CAAC,CAAC;EAChB;AACJ,CAAC;AAACC,OAAA,CAAApB,eAAA,GAAAA,eAAA;AAEK,MAAMqB,YAAY,GAAIpB,IAAY,IAAK;EAC1CQ,MAAM,CAACa,QAAQ,CAACC,IAAI,GAAG,yBAAyBC,kBAAkB,CAACvB,IAAI,CAAC,EAAE;AAC9E,CAAC;AAACmB,OAAA,CAAAC,YAAA,GAAAA,YAAA;AAEK,MAAMI,YAAY,GAAIxB,IAAY,IAAK;EAC1C,IAAIA,IAAI,CAACyB,UAAU,CAAC,QAAQ,CAAC,EAAE;IAC3BjB,MAAM,CAACkB,IAAI,CAAC1B,IAAI,CAAC;EACrB,CAAC,MAAM,IAAIA,IAAI,CAAC2B,OAAO,CAAC,uBAAuB,CAAC,GAAG,CAAC,EAAE;IAClD,KAAK,IAAAC,oBAAS,EAAC;MAAEC,KAAK,EAAE,CAAC;QAAEC,GAAG,EAAE9B;MAAK,CAAC;IAAE,CAAC,CAAC;EAC9C,CAAC,MAAM;IACHQ,MAAM,CAACkB,IAAI,CAAC1B,IAAI,EAAE,QAAQ,CAAC;EAC/B;AACJ,CAAC;AAACmB,OAAA,CAAAK,YAAA,GAAAA,YAAA","ignoreList":[]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { formatStringToHtml } from '@chayns-components/format';
|
|
2
2
|
import { ttsToITextString, useTextstringValue } from '@chayns-components/textstring';
|
|
3
3
|
import { createDialog, DialogType, ToastType } from 'chayns-api';
|
|
4
|
-
import React, { useCallback, useMemo, useRef } from 'react';
|
|
4
|
+
import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';
|
|
5
5
|
import textStrings from '../../constants/textStrings';
|
|
6
6
|
import { useStickyActionState } from '../../hooks/useStickyActionState';
|
|
7
7
|
import SharingContextMenu from '../sharing-context-menu/SharingContextMenu';
|
|
@@ -9,22 +9,21 @@ import Icon from '../icon/Icon';
|
|
|
9
9
|
import { StyledCopyableContent, StyledCopyableContentActionGroup, StyledCopyableContentActions, StyledCopyableContentBody, StyledCopyableContentButton } from './CopyableContent.styles';
|
|
10
10
|
import { CopyableContentAppearance } from './CopyableContent.types';
|
|
11
11
|
import { copyableContentToClipboard } from './copyableContentClipboard';
|
|
12
|
+
const COPY_FEEDBACK_DURATION = 1500;
|
|
12
13
|
const CopyableContent = ({
|
|
13
14
|
appearance = CopyableContentAppearance.Default,
|
|
14
15
|
content,
|
|
15
16
|
children,
|
|
16
|
-
copiedMessage,
|
|
17
17
|
copyFailedMessage
|
|
18
18
|
}) => {
|
|
19
19
|
const rootRef = useRef(null);
|
|
20
20
|
const actionGroupRef = useRef(null);
|
|
21
|
+
const copyFeedbackTimeoutRef = useRef();
|
|
21
22
|
const isActionGroupSticky = useStickyActionState(rootRef, actionGroupRef);
|
|
23
|
+
const [hasCopied, setHasCopied] = useState(false);
|
|
22
24
|
const defaultCopyButtonText = useTextstringValue({
|
|
23
25
|
textstring: ttsToITextString(textStrings.components.copyableContent.copy)
|
|
24
26
|
});
|
|
25
|
-
const defaultCopiedMessage = useTextstringValue({
|
|
26
|
-
textstring: ttsToITextString(textStrings.components.copyableContent.copied)
|
|
27
|
-
});
|
|
28
27
|
const defaultCopyFailedMessage = useTextstringValue({
|
|
29
28
|
textstring: ttsToITextString(textStrings.components.copyableContent.copyFailed)
|
|
30
29
|
});
|
|
@@ -32,15 +31,20 @@ const CopyableContent = ({
|
|
|
32
31
|
textstring: ttsToITextString(textStrings.components.copyableContent.share)
|
|
33
32
|
});
|
|
34
33
|
const html = useMemo(() => formatStringToHtml(content).html, [content]);
|
|
34
|
+
useEffect(() => () => {
|
|
35
|
+
window.clearTimeout(copyFeedbackTimeoutRef.current);
|
|
36
|
+
}, []);
|
|
37
|
+
const showCopyFeedback = useCallback(() => {
|
|
38
|
+
window.clearTimeout(copyFeedbackTimeoutRef.current);
|
|
39
|
+
setHasCopied(true);
|
|
40
|
+
copyFeedbackTimeoutRef.current = window.setTimeout(() => {
|
|
41
|
+
setHasCopied(false);
|
|
42
|
+
}, COPY_FEEDBACK_DURATION);
|
|
43
|
+
}, []);
|
|
35
44
|
const handleCopy = useCallback(async () => {
|
|
36
45
|
try {
|
|
37
46
|
await copyableContentToClipboard(content);
|
|
38
|
-
|
|
39
|
-
showCloseIcon: true,
|
|
40
|
-
text: copiedMessage ?? defaultCopiedMessage,
|
|
41
|
-
toastType: ToastType.SUCCESS,
|
|
42
|
-
type: DialogType.TOAST
|
|
43
|
-
}).open();
|
|
47
|
+
showCopyFeedback();
|
|
44
48
|
} catch {
|
|
45
49
|
void createDialog({
|
|
46
50
|
showCloseIcon: true,
|
|
@@ -49,7 +53,7 @@ const CopyableContent = ({
|
|
|
49
53
|
type: DialogType.TOAST
|
|
50
54
|
}).open();
|
|
51
55
|
}
|
|
52
|
-
}, [content,
|
|
56
|
+
}, [content, defaultCopyFailedMessage, copyFailedMessage, showCopyFeedback]);
|
|
53
57
|
return /*#__PURE__*/React.createElement(StyledCopyableContent, {
|
|
54
58
|
$appearance: appearance,
|
|
55
59
|
className: "copyable-content",
|
|
@@ -64,9 +68,11 @@ const CopyableContent = ({
|
|
|
64
68
|
},
|
|
65
69
|
type: "button"
|
|
66
70
|
}, /*#__PURE__*/React.createElement(Icon, {
|
|
67
|
-
icons: ['fa-light fa-copy']
|
|
71
|
+
icons: hasCopied ? ['fa fa-check'] : ['fa-light fa-copy']
|
|
68
72
|
})), /*#__PURE__*/React.createElement(SharingContextMenu, {
|
|
69
73
|
link: content,
|
|
74
|
+
shouldShowCallingCodeAction: false,
|
|
75
|
+
shouldShowCopyAction: false,
|
|
70
76
|
shouldUseDefaultTriggerStyles: false
|
|
71
77
|
}, /*#__PURE__*/React.createElement(StyledCopyableContentButton, {
|
|
72
78
|
$isSticky: isActionGroupSticky,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CopyableContent.js","names":["formatStringToHtml","ttsToITextString","useTextstringValue","createDialog","DialogType","ToastType","React","useCallback","useMemo","useRef","textStrings","useStickyActionState","SharingContextMenu","Icon","StyledCopyableContent","StyledCopyableContentActionGroup","StyledCopyableContentActions","StyledCopyableContentBody","StyledCopyableContentButton","CopyableContentAppearance","copyableContentToClipboard","CopyableContent","appearance","Default","content","children","
|
|
1
|
+
{"version":3,"file":"CopyableContent.js","names":["formatStringToHtml","ttsToITextString","useTextstringValue","createDialog","DialogType","ToastType","React","useCallback","useEffect","useMemo","useRef","useState","textStrings","useStickyActionState","SharingContextMenu","Icon","StyledCopyableContent","StyledCopyableContentActionGroup","StyledCopyableContentActions","StyledCopyableContentBody","StyledCopyableContentButton","CopyableContentAppearance","copyableContentToClipboard","COPY_FEEDBACK_DURATION","CopyableContent","appearance","Default","content","children","copyFailedMessage","rootRef","actionGroupRef","copyFeedbackTimeoutRef","isActionGroupSticky","hasCopied","setHasCopied","defaultCopyButtonText","textstring","components","copyableContent","copy","defaultCopyFailedMessage","copyFailed","shareText","share","html","window","clearTimeout","current","showCopyFeedback","setTimeout","handleCopy","showCloseIcon","text","toastType","ERROR","type","TOAST","open","createElement","$appearance","className","ref","$isSticky","onClick","icons","link","shouldShowCallingCodeAction","shouldShowCopyAction","shouldUseDefaultTriggerStyles","dangerouslySetInnerHTML","__html","displayName"],"sources":["../../../../src/components/copyable-content/CopyableContent.tsx"],"sourcesContent":["import { formatStringToHtml } from '@chayns-components/format';\nimport { ttsToITextString, useTextstringValue } from '@chayns-components/textstring';\nimport { createDialog, DialogType, ToastType } from 'chayns-api';\nimport React, { FC, ReactNode, useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport textStrings from '../../constants/textStrings';\nimport { useStickyActionState } from '../../hooks/useStickyActionState';\nimport SharingContextMenu from '../sharing-context-menu/SharingContextMenu';\nimport Icon from '../icon/Icon';\nimport {\n StyledCopyableContent,\n StyledCopyableContentActionGroup,\n StyledCopyableContentActions,\n StyledCopyableContentBody,\n StyledCopyableContentButton,\n} from './CopyableContent.styles';\nimport { CopyableContentAppearance } from './CopyableContent.types';\nimport { copyableContentToClipboard } from './copyableContentClipboard';\n\nconst COPY_FEEDBACK_DURATION = 1500;\n\nexport type CopyableContentProps = {\n /**\n * Controls the visual surface of the content block.\n */\n appearance?: CopyableContentAppearance;\n content: string;\n children?: ReactNode;\n copyFailedMessage?: string;\n};\n\nconst CopyableContent: FC<CopyableContentProps> = ({\n appearance = CopyableContentAppearance.Default,\n content,\n children,\n copyFailedMessage,\n}) => {\n const rootRef = useRef<HTMLElement>(null);\n const actionGroupRef = useRef<HTMLDivElement>(null);\n const copyFeedbackTimeoutRef = useRef<number>();\n const isActionGroupSticky = useStickyActionState(rootRef, actionGroupRef);\n const [hasCopied, setHasCopied] = useState(false);\n\n const defaultCopyButtonText = useTextstringValue({\n textstring: ttsToITextString(textStrings.components.copyableContent.copy),\n });\n const defaultCopyFailedMessage = useTextstringValue({\n textstring: ttsToITextString(textStrings.components.copyableContent.copyFailed),\n });\n const shareText = useTextstringValue({\n textstring: ttsToITextString(textStrings.components.copyableContent.share),\n });\n\n const html = useMemo(() => formatStringToHtml(content).html, [content]);\n\n useEffect(\n () => () => {\n window.clearTimeout(copyFeedbackTimeoutRef.current);\n },\n [],\n );\n\n const showCopyFeedback = useCallback(() => {\n window.clearTimeout(copyFeedbackTimeoutRef.current);\n setHasCopied(true);\n\n copyFeedbackTimeoutRef.current = window.setTimeout(() => {\n setHasCopied(false);\n }, COPY_FEEDBACK_DURATION);\n }, []);\n\n const handleCopy = useCallback(async () => {\n try {\n await copyableContentToClipboard(content);\n showCopyFeedback();\n } catch {\n void createDialog({\n showCloseIcon: true,\n text: copyFailedMessage ?? defaultCopyFailedMessage,\n toastType: ToastType.ERROR,\n type: DialogType.TOAST,\n }).open();\n }\n }, [content, defaultCopyFailedMessage, copyFailedMessage, showCopyFeedback]);\n\n return (\n <StyledCopyableContent $appearance={appearance} className=\"copyable-content\" ref={rootRef}>\n <StyledCopyableContentActions ref={actionGroupRef}>\n <StyledCopyableContentActionGroup>\n <StyledCopyableContentButton\n $isSticky={isActionGroupSticky}\n aria-label={defaultCopyButtonText}\n onClick={() => {\n void handleCopy();\n }}\n type=\"button\"\n >\n <Icon icons={hasCopied ? ['fa fa-check'] : ['fa-light fa-copy']} />\n </StyledCopyableContentButton>\n <SharingContextMenu\n link={content}\n shouldShowCallingCodeAction={false}\n shouldShowCopyAction={false}\n shouldUseDefaultTriggerStyles={false}\n >\n <StyledCopyableContentButton\n $isSticky={isActionGroupSticky}\n aria-label={shareText}\n type=\"button\"\n >\n <Icon icons={['fa fa-share-nodes']} />\n </StyledCopyableContentButton>\n </SharingContextMenu>\n </StyledCopyableContentActionGroup>\n </StyledCopyableContentActions>\n <StyledCopyableContentBody>\n {children ?? <div dangerouslySetInnerHTML={{ __html: html }} />}\n </StyledCopyableContentBody>\n </StyledCopyableContent>\n );\n};\n\nCopyableContent.displayName = 'CopyableContent';\n\nexport default CopyableContent;\n\nexport { CopyableContentAppearance } from './CopyableContent.types';\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -5,7 +5,7 @@ const getBackgroundColor = ({
|
|
|
5
5
|
theme
|
|
6
6
|
}) => {
|
|
7
7
|
if ($appearance === CopyableContentAppearance.Chat) {
|
|
8
|
-
return
|
|
8
|
+
return 'rgba(0, 0, 0, 0.2)';
|
|
9
9
|
}
|
|
10
10
|
const secondaryColor = theme['secondary-100-rgb'] ?? '255, 255, 255';
|
|
11
11
|
const opacity = theme.cardBackgroundOpacity ?? 1;
|
|
@@ -15,6 +15,7 @@ export const StyledCopyableContent = styled.section`
|
|
|
15
15
|
--copyable-content-action-size: 32px;
|
|
16
16
|
--copyable-content-action-inset: 8px;
|
|
17
17
|
|
|
18
|
+
margin: 4px 0;
|
|
18
19
|
min-width: 0;
|
|
19
20
|
max-width: 100%;
|
|
20
21
|
overflow-x: clip;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CopyableContent.styles.js","names":["styled","CopyableContentAppearance","getBackgroundColor","$appearance","theme","Chat","
|
|
1
|
+
{"version":3,"file":"CopyableContent.styles.js","names":["styled","CopyableContentAppearance","getBackgroundColor","$appearance","theme","Chat","secondaryColor","opacity","cardBackgroundOpacity","StyledCopyableContent","section","cardBorderRadius","text","StyledCopyableContentActions","div","StyledCopyableContentActionGroup","StyledCopyableContentButton","button","$isSticky","buttonBackgroundColor","StyledCopyableContentBody","headline","primary"],"sources":["../../../../src/components/copyable-content/CopyableContent.styles.ts"],"sourcesContent":["import type { WithTheme } from '../color-scheme-provider/ColorSchemeProvider';\nimport styled from 'styled-components';\nimport { CopyableContentAppearance } from './CopyableContent.types';\n\ntype StyledCopyableContentProps = WithTheme<{\n $appearance: CopyableContentAppearance;\n}>;\n\nconst getBackgroundColor = ({ $appearance, theme }: StyledCopyableContentProps) => {\n if ($appearance === CopyableContentAppearance.Chat) {\n return 'rgba(0, 0, 0, 0.2)';\n }\n\n const secondaryColor = theme['secondary-100-rgb'] ?? '255, 255, 255';\n const opacity = theme.cardBackgroundOpacity ?? 1;\n\n return `rgba(${secondaryColor}, ${opacity})`;\n};\n\nexport const StyledCopyableContent = styled.section<StyledCopyableContentProps>`\n --copyable-content-action-size: 32px;\n --copyable-content-action-inset: 8px;\n\n margin: 4px 0;\n min-width: 0;\n max-width: 100%;\n overflow-x: clip;\n overflow-wrap: anywhere;\n padding-top: calc(\n var(--copyable-content-action-size) + var(--copyable-content-action-inset) * 2\n );\n border-radius: ${({ theme }) => theme.cardBorderRadius}px;\n background-color: ${getBackgroundColor};\n color: ${({ theme }) => theme.text};\n`;\n\ntype StyledCopyableContentButtonProps = WithTheme<{\n $isSticky: boolean;\n}>;\n\nexport const StyledCopyableContentActions = styled.div`\n position: sticky;\n top: var(--copyable-content-action-inset);\n z-index: 1;\n display: flex;\n justify-content: flex-end;\n height: calc(var(--copyable-content-action-size) + var(--copyable-content-action-inset));\n margin-top: calc(\n (var(--copyable-content-action-size) + var(--copyable-content-action-inset)) * -1\n );\n padding-right: var(--copyable-content-action-inset);\n`;\n\nexport const StyledCopyableContentActionGroup = styled.div`\n display: flex;\n gap: 4px;\n height: var(--copyable-content-action-size);\n`;\n\nexport const StyledCopyableContentButton = styled.button<StyledCopyableContentButtonProps>`\n box-sizing: border-box;\n border: 1px solid ${({ $isSticky, theme }) => ($isSticky ? theme['202'] : 'transparent')};\n border-radius: 4px;\n width: var(--copyable-content-action-size);\n height: var(--copyable-content-action-size);\n padding: 0;\n cursor: pointer;\n background-color: ${({ $isSticky, theme }) => ($isSticky ? theme['100'] : 'transparent')};\n color: ${({ theme }) => theme.text};\n box-shadow: ${({ $isSticky }) => ($isSticky ? '0 2px 8px rgba(0, 0, 0, 0.16)' : 'none')};\n transition:\n background-color 0.15s ease,\n border-color 0.15s ease,\n box-shadow 0.15s ease,\n transform 0.15s ease;\n\n &:hover {\n background-color: rgba(${({ theme }) => theme['text-rgb']}, 0.1);\n box-shadow: inset 0 0 0 1px rgba(${({ theme }) => theme['text-rgb']}, 0.06);\n }\n\n &:active {\n transform: scale(0.9);\n }\n\n &:focus-visible {\n outline: 2px solid ${({ theme }) => theme.buttonBackgroundColor};\n outline-offset: 2px;\n }\n`;\n\nexport const StyledCopyableContentBody = styled.div<WithTheme<unknown>>`\n min-width: 0;\n max-width: 100%;\n overflow-wrap: anywhere;\n padding: 0 12px 12px;\n\n h1,\n h2,\n h3,\n h4,\n h5,\n h6,\n p,\n ul,\n ol,\n blockquote {\n margin: 0 0 12px;\n }\n\n h1,\n h2,\n h3,\n h4,\n h5,\n h6 {\n color: ${({ theme }) => theme.headline};\n }\n\n ul,\n ol {\n padding-left: 24px;\n }\n\n blockquote {\n padding-left: 12px;\n border-left: 3px solid ${({ theme }) => theme['202']};\n }\n\n a {\n color: ${({ theme }) => theme.primary};\n overflow-wrap: anywhere;\n }\n\n > :last-child {\n margin-bottom: 0;\n }\n`;\n"],"mappings":"AACA,OAAOA,MAAM,MAAM,mBAAmB;AACtC,SAASC,yBAAyB,QAAQ,yBAAyB;AAMnE,MAAMC,kBAAkB,GAAGA,CAAC;EAAEC,WAAW;EAAEC;AAAkC,CAAC,KAAK;EAC/E,IAAID,WAAW,KAAKF,yBAAyB,CAACI,IAAI,EAAE;IAChD,OAAO,oBAAoB;EAC/B;EAEA,MAAMC,cAAc,GAAGF,KAAK,CAAC,mBAAmB,CAAC,IAAI,eAAe;EACpE,MAAMG,OAAO,GAAGH,KAAK,CAACI,qBAAqB,IAAI,CAAC;EAEhD,OAAO,QAAQF,cAAc,KAAKC,OAAO,GAAG;AAChD,CAAC;AAED,OAAO,MAAME,qBAAqB,GAAGT,MAAM,CAACU,OAAmC;AAC/E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,CAAC;EAAEN;AAAM,CAAC,KAAKA,KAAK,CAACO,gBAAgB;AAC1D,wBAAwBT,kBAAkB;AAC1C,aAAa,CAAC;EAAEE;AAAM,CAAC,KAAKA,KAAK,CAACQ,IAAI;AACtC,CAAC;AAMD,OAAO,MAAMC,4BAA4B,GAAGb,MAAM,CAACc,GAAG;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAED,OAAO,MAAMC,gCAAgC,GAAGf,MAAM,CAACc,GAAG;AAC1D;AACA;AACA;AACA,CAAC;AAED,OAAO,MAAME,2BAA2B,GAAGhB,MAAM,CAACiB,MAAwC;AAC1F;AACA,wBAAwB,CAAC;EAAEC,SAAS;EAAEd;AAAM,CAAC,KAAMc,SAAS,GAAGd,KAAK,CAAC,KAAK,CAAC,GAAG,aAAc;AAC5F;AACA;AACA;AACA;AACA;AACA,wBAAwB,CAAC;EAAEc,SAAS;EAAEd;AAAM,CAAC,KAAMc,SAAS,GAAGd,KAAK,CAAC,KAAK,CAAC,GAAG,aAAc;AAC5F,aAAa,CAAC;EAAEA;AAAM,CAAC,KAAKA,KAAK,CAACQ,IAAI;AACtC,kBAAkB,CAAC;EAAEM;AAAU,CAAC,KAAMA,SAAS,GAAG,+BAA+B,GAAG,MAAO;AAC3F;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,CAAC;EAAEd;AAAM,CAAC,KAAKA,KAAK,CAAC,UAAU,CAAC;AACjE,2CAA2C,CAAC;EAAEA;AAAM,CAAC,KAAKA,KAAK,CAAC,UAAU,CAAC;AAC3E;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,CAAC;EAAEA;AAAM,CAAC,KAAKA,KAAK,CAACe,qBAAqB;AACvE;AACA;AACA,CAAC;AAED,OAAO,MAAMC,yBAAyB,GAAGpB,MAAM,CAACc,GAAuB;AACvE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,CAAC;EAAEV;AAAM,CAAC,KAAKA,KAAK,CAACiB,QAAQ;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,CAAC;EAAEjB;AAAM,CAAC,KAAKA,KAAK,CAAC,KAAK,CAAC;AAC5D;AACA;AACA;AACA,iBAAiB,CAAC;EAAEA;AAAM,CAAC,KAAKA,KAAK,CAACkB,OAAO;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA,CAAC","ignoreList":[]}
|
|
@@ -4,12 +4,21 @@ import React from 'react';
|
|
|
4
4
|
import { describe, expect, it, vi } from 'vitest';
|
|
5
5
|
import CopyableContent from './CopyableContent';
|
|
6
6
|
vi.mock('../icon/Icon', () => ({
|
|
7
|
-
default: (
|
|
7
|
+
default: ({
|
|
8
|
+
icons
|
|
9
|
+
}) => /*#__PURE__*/React.createElement("span", {
|
|
10
|
+
"data-icons": icons.join(' ')
|
|
11
|
+
})
|
|
8
12
|
}));
|
|
9
13
|
vi.mock('../sharing-context-menu/SharingContextMenu', () => ({
|
|
10
14
|
default: ({
|
|
11
|
-
children
|
|
12
|
-
|
|
15
|
+
children,
|
|
16
|
+
shouldShowCallingCodeAction,
|
|
17
|
+
shouldShowCopyAction
|
|
18
|
+
}) => /*#__PURE__*/React.createElement("div", {
|
|
19
|
+
"data-calling-code-action": shouldShowCallingCodeAction,
|
|
20
|
+
"data-copy-action": shouldShowCopyAction
|
|
21
|
+
}, children)
|
|
13
22
|
}));
|
|
14
23
|
vi.mock('chayns-api', async importOriginal => ({
|
|
15
24
|
...(await importOriginal()),
|
|
@@ -49,32 +58,31 @@ describe('CopyableContent', () => {
|
|
|
49
58
|
const item = write.mock.calls[0][0][0];
|
|
50
59
|
await expect(readBlob(await item.getType('text/plain'))).resolves.toBe('source markdown');
|
|
51
60
|
});
|
|
52
|
-
it('shows a
|
|
61
|
+
it('shows a checkmark after a successful copy', async () => {
|
|
53
62
|
vi.spyOn(navigator.clipboard, 'write').mockResolvedValue();
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
63
|
+
const {
|
|
64
|
+
container
|
|
65
|
+
} = render(/*#__PURE__*/React.createElement(CopyableContent, {
|
|
66
|
+
content: "source"
|
|
57
67
|
}));
|
|
58
68
|
fireEvent.click(screen.getByRole('button', {
|
|
59
69
|
name: 'Kopieren'
|
|
60
70
|
}));
|
|
61
|
-
await waitFor(
|
|
62
|
-
|
|
63
|
-
createDialog
|
|
64
|
-
} = await import('chayns-api');
|
|
65
|
-
expect(createDialog).toHaveBeenCalledWith(expect.objectContaining({
|
|
66
|
-
text: 'Done'
|
|
67
|
-
}));
|
|
71
|
+
await waitFor(() => {
|
|
72
|
+
expect(container.querySelector('[data-icons="fa fa-check"]')).toBeInTheDocument();
|
|
68
73
|
});
|
|
69
|
-
expect(screen.queryByRole('status')).not.toBeInTheDocument();
|
|
70
74
|
});
|
|
71
75
|
it('offers sharing actions', () => {
|
|
72
|
-
|
|
76
|
+
const {
|
|
77
|
+
container
|
|
78
|
+
} = render(/*#__PURE__*/React.createElement(CopyableContent, {
|
|
73
79
|
content: "source"
|
|
74
80
|
}));
|
|
75
81
|
expect(screen.getByRole('button', {
|
|
76
82
|
name: 'Teilen'
|
|
77
83
|
})).toBeInTheDocument();
|
|
84
|
+
expect(container.querySelector('[data-copy-action="false"]')).toBeInTheDocument();
|
|
85
|
+
expect(container.querySelector('[data-calling-code-action="false"]')).toBeInTheDocument();
|
|
78
86
|
});
|
|
79
87
|
});
|
|
80
88
|
//# sourceMappingURL=CopyableContent.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CopyableContent.test.js","names":["fireEvent","render","screen","waitFor","React","describe","expect","it","vi","CopyableContent","mock","default","createElement","children","importOriginal","createDialog","fn","open","readBlob","blob","Promise","resolve","reject","reader","FileReader","onerror","error","onload","result","readAsText","content","getByRole","name","toBeInTheDocument","toHaveAttribute","document","querySelector","not","write","spyOn","navigator","clipboard","mockResolvedValue","click","toHaveBeenCalled","item","calls","getType","resolves","toBe","
|
|
1
|
+
{"version":3,"file":"CopyableContent.test.js","names":["fireEvent","render","screen","waitFor","React","describe","expect","it","vi","CopyableContent","mock","default","icons","createElement","join","children","shouldShowCallingCodeAction","shouldShowCopyAction","importOriginal","createDialog","fn","open","readBlob","blob","Promise","resolve","reject","reader","FileReader","onerror","error","onload","result","readAsText","content","getByRole","name","toBeInTheDocument","toHaveAttribute","document","querySelector","not","write","spyOn","navigator","clipboard","mockResolvedValue","click","toHaveBeenCalled","item","calls","getType","resolves","toBe","container"],"sources":["../../../../src/components/copyable-content/CopyableContent.test.tsx"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-unsafe-call */\nimport { fireEvent, render, screen, waitFor } from '@testing-library/react';\nimport React from 'react';\nimport { describe, expect, it, vi } from 'vitest';\nimport CopyableContent from './CopyableContent';\n\nvi.mock('../icon/Icon', () => ({\n default: ({ icons }: { icons: string[] }) => <span data-icons={icons.join(' ')} />,\n}));\n\nvi.mock('../sharing-context-menu/SharingContextMenu', () => ({\n default: ({\n children,\n shouldShowCallingCodeAction,\n shouldShowCopyAction,\n }: {\n children: React.ReactNode;\n shouldShowCallingCodeAction?: boolean;\n shouldShowCopyAction?: boolean;\n }) => (\n <div\n data-calling-code-action={shouldShowCallingCodeAction}\n data-copy-action={shouldShowCopyAction}\n >\n {children}\n </div>\n ),\n}));\n\nvi.mock('chayns-api', async (importOriginal) => ({\n ...(await importOriginal<typeof import('chayns-api')>()),\n createDialog: vi.fn(() => ({ open: vi.fn() })),\n}));\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('CopyableContent', () => {\n it('renders formatted markdown without active input HTML', () => {\n render(\n <CopyableContent\n content={\n '# Heading\\n\\n- Entry\\n\\n[Link](https://example.com)\\n<script onload=\"x\">bad</script>'\n }\n />,\n );\n\n expect(screen.getByRole('heading', { name: 'Heading' })).toBeInTheDocument();\n expect(screen.getByRole('link', { name: 'Link' })).toHaveAttribute(\n 'href',\n 'https://example.com',\n );\n expect(document.querySelector('script')).not.toBeInTheDocument();\n expect(document.querySelector('[onload]')).not.toBeInTheDocument();\n });\n\n it('copies content instead of custom children', async () => {\n const write = vi.spyOn(navigator.clipboard, 'write').mockResolvedValue();\n render(<CopyableContent content=\"source markdown\">Visible replacement</CopyableContent>);\n\n fireEvent.click(screen.getByRole('button', { name: 'Kopieren' }));\n\n await waitFor(() => expect(write).toHaveBeenCalled());\n const item = write.mock.calls[0][0][0] as unknown as ClipboardItem;\n await expect(readBlob(await item.getType('text/plain'))).resolves.toBe('source markdown');\n });\n\n it('shows a checkmark after a successful copy', async () => {\n vi.spyOn(navigator.clipboard, 'write').mockResolvedValue();\n const { container } = render(<CopyableContent content=\"source\" />);\n\n fireEvent.click(screen.getByRole('button', { name: 'Kopieren' }));\n\n await waitFor(() => {\n expect(container.querySelector('[data-icons=\"fa fa-check\"]')).toBeInTheDocument();\n });\n });\n\n it('offers sharing actions', () => {\n const { container } = render(<CopyableContent content=\"source\" />);\n\n expect(screen.getByRole('button', { name: 'Teilen' })).toBeInTheDocument();\n expect(container.querySelector('[data-copy-action=\"false\"]')).toBeInTheDocument();\n expect(container.querySelector('[data-calling-code-action=\"false\"]')).toBeInTheDocument();\n });\n});\n"],"mappings":"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","ignoreList":[]}
|