@chayns-components/core 5.5.45 → 5.5.52

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.
Files changed (28) hide show
  1. package/lib/cjs/api/image/post.js +2 -4
  2. package/lib/cjs/api/image/post.js.map +1 -1
  3. package/lib/cjs/api/video/post.js +2 -1
  4. package/lib/cjs/api/video/post.js.map +1 -1
  5. package/lib/cjs/components/list/list-item/ListItem.js +3 -1
  6. package/lib/cjs/components/list/list-item/ListItem.js.map +1 -1
  7. package/lib/cjs/components/list/list-item/ListItem.test.js +137 -0
  8. package/lib/cjs/components/list/list-item/ListItem.test.js.map +1 -0
  9. package/lib/cjs/components/list/list-item/list-item-head/ListItemHead.js +2 -1
  10. package/lib/cjs/components/list/list-item/list-item-head/ListItemHead.js.map +1 -1
  11. package/lib/cjs/constants/uploadUrls.js +52 -0
  12. package/lib/cjs/constants/uploadUrls.js.map +1 -0
  13. package/lib/esm/api/image/post.js +1 -3
  14. package/lib/esm/api/image/post.js.map +1 -1
  15. package/lib/esm/api/video/post.js +2 -1
  16. package/lib/esm/api/video/post.js.map +1 -1
  17. package/lib/esm/components/list/list-item/ListItem.js +3 -1
  18. package/lib/esm/components/list/list-item/ListItem.js.map +1 -1
  19. package/lib/esm/components/list/list-item/ListItem.test.js +133 -0
  20. package/lib/esm/components/list/list-item/ListItem.test.js.map +1 -0
  21. package/lib/esm/components/list/list-item/list-item-head/ListItemHead.js +2 -1
  22. package/lib/esm/components/list/list-item/list-item-head/ListItemHead.js.map +1 -1
  23. package/lib/esm/constants/uploadUrls.js +46 -0
  24. package/lib/esm/constants/uploadUrls.js.map +1 -0
  25. package/lib/types/components/list/list-item/ListItem.d.ts +17 -0
  26. package/lib/types/components/list/list-item/list-item-head/ListItemHead.d.ts +1 -0
  27. package/lib/types/constants/uploadUrls.d.ts +24 -0
  28. package/package.json +2 -2
@@ -5,9 +5,7 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.postImage = void 0;
7
7
  var _chaynsApi = require("chayns-api");
8
- const IMAGE_SERVICE_API_V3_URL = 'https://cube.tobit.cloud/image-service/v3/Images';
9
- const IMAGE_RESIZER_API_URL = 'https://cube.tobit.cloud/image-resizer-backend/api/v1.0/image';
10
-
8
+ var _uploadUrls = require("../../constants/uploadUrls");
11
9
  /**
12
10
  * Uploads an image to the tsimg cloud service
13
11
  */
@@ -28,7 +26,7 @@ const postImage = async ({
28
26
 
29
27
  const body = new FormData();
30
28
  body.append('File', file);
31
- const url = file.size > 10 * 1024 * 1024 ? `${IMAGE_RESIZER_API_URL}/${shouldUploadImageToSite ? site.id : user.personId}` : `${IMAGE_SERVICE_API_V3_URL}/${shouldUploadImageToSite ? site.id : user.personId}`;
29
+ const url = file.size > 10 * 1024 * 1024 ? `${_uploadUrls.IMAGE_RESIZER_API_URL}/${shouldUploadImageToSite ? site.id : user.personId}` : `${_uploadUrls.IMAGE_SERVICE_API_V3_URL}/${shouldUploadImageToSite ? site.id : user.personId}`;
32
30
  const response = await fetch(url, {
33
31
  body,
34
32
  headers: {
@@ -1 +1 @@
1
- {"version":3,"file":"post.js","names":["_chaynsApi","require","IMAGE_SERVICE_API_V3_URL","IMAGE_RESIZER_API_URL","postImage","file","shouldUploadImageToSite","accessToken","getAccessToken","user","getUser","site","getSite","personId","undefined","body","FormData","append","url","size","id","response","fetch","headers","Accept","Authorization","method","ok","image","baseDomain","json","key","path","base","endsWith","slice","meta","preview","width","String","height","Error","status","exports"],"sources":["../../../../src/api/image/post.ts"],"sourcesContent":["import { getAccessToken, getSite, getUser } from 'chayns-api';\nimport type { Meta } from '../../types/file';\n\nexport interface PostImageResult {\n key: string;\n base: string;\n meta?: Meta;\n}\n\ninterface Result {\n requestId: string;\n image: Image;\n baseDomain: string;\n signature: Signature;\n}\n\nexport interface Image {\n path: string;\n width: number;\n height: number;\n size: number;\n hash: string;\n preview: string;\n isSecured: boolean;\n format: string;\n fileExtension: string;\n}\n\nexport interface Signature {\n verify: string;\n signature: string;\n expires: Date;\n}\n\ninterface PostImageOptions {\n file: File;\n shouldUploadImageToSite?: boolean;\n}\n\nconst IMAGE_SERVICE_API_V3_URL = 'https://cube.tobit.cloud/image-service/v3/Images';\nconst IMAGE_RESIZER_API_URL = 'https://cube.tobit.cloud/image-resizer-backend/api/v1.0/image';\n\n/**\n * Uploads an image to the tsimg cloud service\n */\nexport const postImage = async ({\n file,\n shouldUploadImageToSite,\n}: PostImageOptions): Promise<PostImageResult | undefined> => {\n const { accessToken } = await getAccessToken();\n const user = getUser();\n const site = getSite();\n\n if (!accessToken || !user?.personId) {\n return undefined;\n }\n\n // const body = await getFileAsArrayBuffer(file);\n\n const body = new FormData();\n\n body.append('File', file);\n\n const url =\n file.size > 10 * 1024 * 1024\n ? `${IMAGE_RESIZER_API_URL}/${shouldUploadImageToSite ? site.id : user.personId}`\n : `${IMAGE_SERVICE_API_V3_URL}/${shouldUploadImageToSite ? site.id : user.personId}`;\n\n const response = await fetch(url, {\n body,\n headers: {\n Accept: 'application/json',\n Authorization: `bearer ${accessToken}`,\n },\n method: 'POST',\n });\n\n if (response.ok) {\n const { image, baseDomain } = (await response.json()) as Result;\n // Maps image-service-api-v3 result to v2 result.\n return {\n key: image.path,\n // Removes trailing slash from baseDomain, since image-service-api-v2 doesn't have a trailing slash on base.\n base: baseDomain.endsWith('/') ? baseDomain.slice(0, -1) : baseDomain,\n meta: {\n preview: image.preview,\n width: String(image.width),\n height: String(image.height),\n },\n };\n }\n\n throw Error(`Failed to POST image (status code: ${response.status}).`);\n};\n"],"mappings":";;;;;;AAAA,IAAAA,UAAA,GAAAC,OAAA;AAuCA,MAAMC,wBAAwB,GAAG,kDAAkD;AACnF,MAAMC,qBAAqB,GAAG,+DAA+D;;AAE7F;AACA;AACA;AACO,MAAMC,SAAS,GAAG,MAAAA,CAAO;EAC5BC,IAAI;EACJC;AACc,CAAC,KAA2C;EAC1D,MAAM;IAAEC;EAAY,CAAC,GAAG,MAAM,IAAAC,yBAAc,EAAC,CAAC;EAC9C,MAAMC,IAAI,GAAG,IAAAC,kBAAO,EAAC,CAAC;EACtB,MAAMC,IAAI,GAAG,IAAAC,kBAAO,EAAC,CAAC;EAEtB,IAAI,CAACL,WAAW,IAAI,EAACE,IAAI,aAAJA,IAAI,eAAJA,IAAI,CAAEI,QAAQ,GAAE;IACjC,OAAOC,SAAS;EACpB;;EAEA;;EAEA,MAAMC,IAAI,GAAG,IAAIC,QAAQ,CAAC,CAAC;EAE3BD,IAAI,CAACE,MAAM,CAAC,MAAM,EAAEZ,IAAI,CAAC;EAEzB,MAAMa,GAAG,GACLb,IAAI,CAACc,IAAI,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,GACtB,GAAGhB,qBAAqB,IAAIG,uBAAuB,GAAGK,IAAI,CAACS,EAAE,GAAGX,IAAI,CAACI,QAAQ,EAAE,GAC/E,GAAGX,wBAAwB,IAAII,uBAAuB,GAAGK,IAAI,CAACS,EAAE,GAAGX,IAAI,CAACI,QAAQ,EAAE;EAE5F,MAAMQ,QAAQ,GAAG,MAAMC,KAAK,CAACJ,GAAG,EAAE;IAC9BH,IAAI;IACJQ,OAAO,EAAE;MACLC,MAAM,EAAE,kBAAkB;MAC1BC,aAAa,EAAE,UAAUlB,WAAW;IACxC,CAAC;IACDmB,MAAM,EAAE;EACZ,CAAC,CAAC;EAEF,IAAIL,QAAQ,CAACM,EAAE,EAAE;IACb,MAAM;MAAEC,KAAK;MAAEC;IAAW,CAAC,GAAI,MAAMR,QAAQ,CAACS,IAAI,CAAC,CAAY;IAC/D;IACA,OAAO;MACHC,GAAG,EAAEH,KAAK,CAACI,IAAI;MACf;MACAC,IAAI,EAAEJ,UAAU,CAACK,QAAQ,CAAC,GAAG,CAAC,GAAGL,UAAU,CAACM,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAGN,UAAU;MACrEO,IAAI,EAAE;QACFC,OAAO,EAAET,KAAK,CAACS,OAAO;QACtBC,KAAK,EAAEC,MAAM,CAACX,KAAK,CAACU,KAAK,CAAC;QAC1BE,MAAM,EAAED,MAAM,CAACX,KAAK,CAACY,MAAM;MAC/B;IACJ,CAAC;EACL;EAEA,MAAMC,KAAK,CAAC,sCAAsCpB,QAAQ,CAACqB,MAAM,IAAI,CAAC;AAC1E,CAAC;AAACC,OAAA,CAAAvC,SAAA,GAAAA,SAAA","ignoreList":[]}
1
+ {"version":3,"file":"post.js","names":["_chaynsApi","require","_uploadUrls","postImage","file","shouldUploadImageToSite","accessToken","getAccessToken","user","getUser","site","getSite","personId","undefined","body","FormData","append","url","size","IMAGE_RESIZER_API_URL","id","IMAGE_SERVICE_API_V3_URL","response","fetch","headers","Accept","Authorization","method","ok","image","baseDomain","json","key","path","base","endsWith","slice","meta","preview","width","String","height","Error","status","exports"],"sources":["../../../../src/api/image/post.ts"],"sourcesContent":["import { getAccessToken, getSite, getUser } from 'chayns-api';\nimport { IMAGE_RESIZER_API_URL, IMAGE_SERVICE_API_V3_URL } from '../../constants/uploadUrls';\nimport type { Meta } from '../../types/file';\n\nexport interface PostImageResult {\n key: string;\n base: string;\n meta?: Meta;\n}\n\ninterface Result {\n requestId: string;\n image: Image;\n baseDomain: string;\n signature: Signature;\n}\n\nexport interface Image {\n path: string;\n width: number;\n height: number;\n size: number;\n hash: string;\n preview: string;\n isSecured: boolean;\n format: string;\n fileExtension: string;\n}\n\nexport interface Signature {\n verify: string;\n signature: string;\n expires: Date;\n}\n\ninterface PostImageOptions {\n file: File;\n shouldUploadImageToSite?: boolean;\n}\n\n/**\n * Uploads an image to the tsimg cloud service\n */\nexport const postImage = async ({\n file,\n shouldUploadImageToSite,\n}: PostImageOptions): Promise<PostImageResult | undefined> => {\n const { accessToken } = await getAccessToken();\n const user = getUser();\n const site = getSite();\n\n if (!accessToken || !user?.personId) {\n return undefined;\n }\n\n // const body = await getFileAsArrayBuffer(file);\n\n const body = new FormData();\n\n body.append('File', file);\n\n const url =\n file.size > 10 * 1024 * 1024\n ? `${IMAGE_RESIZER_API_URL}/${shouldUploadImageToSite ? site.id : user.personId}`\n : `${IMAGE_SERVICE_API_V3_URL}/${shouldUploadImageToSite ? site.id : user.personId}`;\n\n const response = await fetch(url, {\n body,\n headers: {\n Accept: 'application/json',\n Authorization: `bearer ${accessToken}`,\n },\n method: 'POST',\n });\n\n if (response.ok) {\n const { image, baseDomain } = (await response.json()) as Result;\n // Maps image-service-api-v3 result to v2 result.\n return {\n key: image.path,\n // Removes trailing slash from baseDomain, since image-service-api-v2 doesn't have a trailing slash on base.\n base: baseDomain.endsWith('/') ? baseDomain.slice(0, -1) : baseDomain,\n meta: {\n preview: image.preview,\n width: String(image.width),\n height: String(image.height),\n },\n };\n }\n\n throw Error(`Failed to POST image (status code: ${response.status}).`);\n};\n"],"mappings":";;;;;;AAAA,IAAAA,UAAA,GAAAC,OAAA;AACA,IAAAC,WAAA,GAAAD,OAAA;AAuCA;AACA;AACA;AACO,MAAME,SAAS,GAAG,MAAAA,CAAO;EAC5BC,IAAI;EACJC;AACc,CAAC,KAA2C;EAC1D,MAAM;IAAEC;EAAY,CAAC,GAAG,MAAM,IAAAC,yBAAc,EAAC,CAAC;EAC9C,MAAMC,IAAI,GAAG,IAAAC,kBAAO,EAAC,CAAC;EACtB,MAAMC,IAAI,GAAG,IAAAC,kBAAO,EAAC,CAAC;EAEtB,IAAI,CAACL,WAAW,IAAI,EAACE,IAAI,aAAJA,IAAI,eAAJA,IAAI,CAAEI,QAAQ,GAAE;IACjC,OAAOC,SAAS;EACpB;;EAEA;;EAEA,MAAMC,IAAI,GAAG,IAAIC,QAAQ,CAAC,CAAC;EAE3BD,IAAI,CAACE,MAAM,CAAC,MAAM,EAAEZ,IAAI,CAAC;EAEzB,MAAMa,GAAG,GACLb,IAAI,CAACc,IAAI,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,GACtB,GAAGC,iCAAqB,IAAId,uBAAuB,GAAGK,IAAI,CAACU,EAAE,GAAGZ,IAAI,CAACI,QAAQ,EAAE,GAC/E,GAAGS,oCAAwB,IAAIhB,uBAAuB,GAAGK,IAAI,CAACU,EAAE,GAAGZ,IAAI,CAACI,QAAQ,EAAE;EAE5F,MAAMU,QAAQ,GAAG,MAAMC,KAAK,CAACN,GAAG,EAAE;IAC9BH,IAAI;IACJU,OAAO,EAAE;MACLC,MAAM,EAAE,kBAAkB;MAC1BC,aAAa,EAAE,UAAUpB,WAAW;IACxC,CAAC;IACDqB,MAAM,EAAE;EACZ,CAAC,CAAC;EAEF,IAAIL,QAAQ,CAACM,EAAE,EAAE;IACb,MAAM;MAAEC,KAAK;MAAEC;IAAW,CAAC,GAAI,MAAMR,QAAQ,CAACS,IAAI,CAAC,CAAY;IAC/D;IACA,OAAO;MACHC,GAAG,EAAEH,KAAK,CAACI,IAAI;MACf;MACAC,IAAI,EAAEJ,UAAU,CAACK,QAAQ,CAAC,GAAG,CAAC,GAAGL,UAAU,CAACM,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAGN,UAAU;MACrEO,IAAI,EAAE;QACFC,OAAO,EAAET,KAAK,CAACS,OAAO;QACtBC,KAAK,EAAEC,MAAM,CAACX,KAAK,CAACU,KAAK,CAAC;QAC1BE,MAAM,EAAED,MAAM,CAACX,KAAK,CAACY,MAAM;MAC/B;IACJ,CAAC;EACL;EAEA,MAAMC,KAAK,CAAC,sCAAsCpB,QAAQ,CAACqB,MAAM,IAAI,CAAC;AAC1E,CAAC;AAACC,OAAA,CAAAzC,SAAA,GAAAA,SAAA","ignoreList":[]}
@@ -5,6 +5,7 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.postVideo = void 0;
7
7
  var _chaynsApi = require("chayns-api");
8
+ var _uploadUrls = require("../../constants/uploadUrls");
8
9
  /**
9
10
  * Uploads a video to the streaming service
10
11
  */
@@ -19,7 +20,7 @@ const postVideo = async ({
19
20
  }
20
21
  const formData = new FormData();
21
22
  formData.append('files', file);
22
- const response = await fetch('https://streamingservice.chayns.space/video?disableIntercom=true', {
23
+ const response = await fetch(`${_uploadUrls.VIDEO_SERVICE_URL}?disableIntercom=true`, {
23
24
  body: formData,
24
25
  headers: {
25
26
  Authorization: `bearer ${accessToken}`
@@ -1 +1 @@
1
- {"version":3,"file":"post.js","names":["_chaynsApi","require","postVideo","file","accessToken","getAccessToken","undefined","formData","FormData","append","response","fetch","body","headers","Authorization","method","ok","data","json","Error","status","exports"],"sources":["../../../../src/api/video/post.ts"],"sourcesContent":["import { getAccessToken } from 'chayns-api';\n\nexport interface PostVideoResult {\n id: string;\n originalVideoQuality: string;\n thumbnailUrl: string;\n url: string;\n urlMP4: string;\n}\n\ninterface PostVideoOptions {\n file: File | Blob;\n}\n\n/**\n * Uploads a video to the streaming service\n */\nexport const postVideo = async ({\n file,\n}: PostVideoOptions): Promise<PostVideoResult | undefined> => {\n const { accessToken } = await getAccessToken();\n\n if (!accessToken) {\n return undefined;\n }\n\n const formData = new FormData();\n\n formData.append('files', file);\n\n const response = await fetch(\n 'https://streamingservice.chayns.space/video?disableIntercom=true',\n {\n body: formData,\n headers: {\n Authorization: `bearer ${accessToken}`,\n },\n method: 'POST',\n },\n );\n\n if (response.ok) {\n const data = (await response.json()) as PostVideoResult[];\n\n return data[0];\n }\n\n throw Error(`Failed to POST video (status code: ${response.status}).`);\n};\n"],"mappings":";;;;;;AAAA,IAAAA,UAAA,GAAAC,OAAA;AAcA;AACA;AACA;AACO,MAAMC,SAAS,GAAG,MAAAA,CAAO;EAC5BC;AACc,CAAC,KAA2C;EAC1D,MAAM;IAAEC;EAAY,CAAC,GAAG,MAAM,IAAAC,yBAAc,EAAC,CAAC;EAE9C,IAAI,CAACD,WAAW,EAAE;IACd,OAAOE,SAAS;EACpB;EAEA,MAAMC,QAAQ,GAAG,IAAIC,QAAQ,CAAC,CAAC;EAE/BD,QAAQ,CAACE,MAAM,CAAC,OAAO,EAAEN,IAAI,CAAC;EAE9B,MAAMO,QAAQ,GAAG,MAAMC,KAAK,CACxB,kEAAkE,EAClE;IACIC,IAAI,EAAEL,QAAQ;IACdM,OAAO,EAAE;MACLC,aAAa,EAAE,UAAUV,WAAW;IACxC,CAAC;IACDW,MAAM,EAAE;EACZ,CACJ,CAAC;EAED,IAAIL,QAAQ,CAACM,EAAE,EAAE;IACb,MAAMC,IAAI,GAAI,MAAMP,QAAQ,CAACQ,IAAI,CAAC,CAAuB;IAEzD,OAAOD,IAAI,CAAC,CAAC,CAAC;EAClB;EAEA,MAAME,KAAK,CAAC,sCAAsCT,QAAQ,CAACU,MAAM,IAAI,CAAC;AAC1E,CAAC;AAACC,OAAA,CAAAnB,SAAA,GAAAA,SAAA","ignoreList":[]}
1
+ {"version":3,"file":"post.js","names":["_chaynsApi","require","_uploadUrls","postVideo","file","accessToken","getAccessToken","undefined","formData","FormData","append","response","fetch","VIDEO_SERVICE_URL","body","headers","Authorization","method","ok","data","json","Error","status","exports"],"sources":["../../../../src/api/video/post.ts"],"sourcesContent":["import { getAccessToken } from 'chayns-api';\nimport { VIDEO_SERVICE_URL } from '../../constants/uploadUrls';\n\nexport interface PostVideoResult {\n id: string;\n originalVideoQuality: string;\n thumbnailUrl: string;\n url: string;\n urlMP4: string;\n}\n\ninterface PostVideoOptions {\n file: File | Blob;\n}\n\n/**\n * Uploads a video to the streaming service\n */\nexport const postVideo = async ({\n file,\n}: PostVideoOptions): Promise<PostVideoResult | undefined> => {\n const { accessToken } = await getAccessToken();\n\n if (!accessToken) {\n return undefined;\n }\n\n const formData = new FormData();\n\n formData.append('files', file);\n\n const response = await fetch(`${VIDEO_SERVICE_URL}?disableIntercom=true`, {\n body: formData,\n headers: {\n Authorization: `bearer ${accessToken}`,\n },\n method: 'POST',\n });\n\n if (response.ok) {\n const data = (await response.json()) as PostVideoResult[];\n\n return data[0];\n }\n\n throw Error(`Failed to POST video (status code: ${response.status}).`);\n};\n"],"mappings":";;;;;;AAAA,IAAAA,UAAA,GAAAC,OAAA;AACA,IAAAC,WAAA,GAAAD,OAAA;AAcA;AACA;AACA;AACO,MAAME,SAAS,GAAG,MAAAA,CAAO;EAC5BC;AACc,CAAC,KAA2C;EAC1D,MAAM;IAAEC;EAAY,CAAC,GAAG,MAAM,IAAAC,yBAAc,EAAC,CAAC;EAE9C,IAAI,CAACD,WAAW,EAAE;IACd,OAAOE,SAAS;EACpB;EAEA,MAAMC,QAAQ,GAAG,IAAIC,QAAQ,CAAC,CAAC;EAE/BD,QAAQ,CAACE,MAAM,CAAC,OAAO,EAAEN,IAAI,CAAC;EAE9B,MAAMO,QAAQ,GAAG,MAAMC,KAAK,CAAC,GAAGC,6BAAiB,uBAAuB,EAAE;IACtEC,IAAI,EAAEN,QAAQ;IACdO,OAAO,EAAE;MACLC,aAAa,EAAE,UAAUX,WAAW;IACxC,CAAC;IACDY,MAAM,EAAE;EACZ,CAAC,CAAC;EAEF,IAAIN,QAAQ,CAACO,EAAE,EAAE;IACb,MAAMC,IAAI,GAAI,MAAMR,QAAQ,CAACS,IAAI,CAAC,CAAuB;IAEzD,OAAOD,IAAI,CAAC,CAAC,CAAC;EAClB;EAEA,MAAME,KAAK,CAAC,sCAAsCV,QAAQ,CAACW,MAAM,IAAI,CAAC;AAC1E,CAAC;AAACC,OAAA,CAAApB,SAAA,GAAAA,SAAA","ignoreList":[]}
@@ -49,6 +49,7 @@ const ListItem = /*#__PURE__*/(0, _react2.forwardRef)(({
49
49
  shouldOpenImageOnClick = false,
50
50
  shouldHideImageOrIconBackground,
51
51
  shouldHideIndicator = false,
52
+ shouldAnimateLayout = false,
52
53
  shouldPreventLayoutAnimation = false,
53
54
  shouldRenderClosed = false,
54
55
  shouldShowRoundImageOrIcon,
@@ -230,7 +231,7 @@ const ListItem = /*#__PURE__*/(0, _react2.forwardRef)(({
230
231
  key: `list-item-${uuid}`,
231
232
  ref: listItemRef,
232
233
  "data-uuid": `${listGroupUuid ?? ''}---${uuid}`,
233
- layout: shouldPreventLayoutAnimation || shouldDisableAnimation ? undefined : 'position',
234
+ layout: shouldAnimateLayout && !shouldPreventLayoutAnimation && !shouldDisableAnimation ? 'position' : undefined,
234
235
  $backgroundColor: backgroundColor,
235
236
  $isClickable: isClickable,
236
237
  $isInAccordion: typeof isParentAccordionWrapped === 'boolean' && !areaProvider.shouldDisableListItemPadding,
@@ -287,6 +288,7 @@ const ListItem = /*#__PURE__*/(0, _react2.forwardRef)(({
287
288
  titleElement: titleElement,
288
289
  setShouldEnableTooltip: setShouldEnableTooltip,
289
290
  shouldDisableAnimation: shouldDisableAnimation,
291
+ shouldAnimateLayout: shouldAnimateLayout && !shouldPreventLayoutAnimation && !shouldDisableAnimation,
290
292
  onImageError: onImageError
291
293
  })), /*#__PURE__*/_react2.default.createElement(_react.AnimatePresence, {
292
294
  initial: false
@@ -1 +1 @@
1
- {"version":3,"file":"ListItem.js","names":["_react","require","_react2","_interopRequireWildcard","_styledComponents","_uuid","_Accordion","_AreaContextProvider","_ColorSchemeProvider","_List","_List2","_ListItemBody","_interopRequireDefault","_ListItemHead","_ListItem","_Tooltip","_element","_useFocusRingPortal","_useKeyboardFocusHighlighting","_useListItemFocus","e","__esModule","default","t","WeakMap","r","n","o","i","f","__proto__","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","ListItem","forwardRef","backgroundColor","careOfLocationId","children","cornerImage","hoverItem","icons","imageBackground","images","isDefaultOpen","isOpen","isTitleGreyed","leftElements","onClick","onClose","onLongPress","onOpen","rightElements","shouldShowTooltipOnTitleOverflow","shouldForceBackground","shouldForceBottomLine","shouldForceHover","shouldHideBottomLine","shouldOpenImageOnClick","shouldHideImageOrIconBackground","shouldHideIndicator","shouldPreventLayoutAnimation","shouldRenderClosed","shouldShowRoundImageOrIcon","shouldShowSeparatorBelow","subtitle","title","onImageError","onSizeChange","onTitleInputChange","titleElement","titleInputProps","shouldDisableAnimation","cornerElement","isSelected","shouldEnableKeyboardHighlighting","shouldEnableKeyboardHighlightingProp","ref","isAnyItemExpandable","isWrapped","openItemUuid","updateOpenItemUuid","shouldEnableKeyboardHighlightingContext","listGroupUuid","listItemUuids","registerListItemUuid","unregisterListItemUuid","activeListItemUuid","updateActiveListItemUuid","useContext","ListContext","colorScheme","useColorScheme","theme","useTheme","isInsideListContext","isParentAccordionWrapped","AccordionContext","areaProvider","AreaContext","isInitialRenderRef","useRef","listItemRef","isInDialog","useIsInsideDialog","uuid","useUuid","isExpandable","undefined","isItemOpen","onCloseRef","onOpenRef","shouldEnableTooltip","setShouldEnableTooltip","useState","titleWidth","setTitleWidth","titleMaxWidth","setTitleMaxWidth","useEffect","current","handleHeadClick","useCallback","event","shouldOnlyOpen","isClickable","useImperativeHandle","handleTitleWidthChange","width","maxWidth","shouldShowKeyboardHighlighting","useKeyboardFocusHighlighting","useFocusRingPortal","isEnabled","borderRadius","cardBorderRadius","isInKeyboardNavigationGroup","tabIndex","useMemo","handleKeyDown","isCurrentListItemTarget","currentTarget","target","currentListItemElement","targetElement","handleHorizontalArrowNavigation","handleListItemTabNavigation","currentUuid","handleVerticalListGroupNavigation","handleListItemToggleKey","toggleItem","some","handleKey","isFocusWithinListItem","handleFocus","handleBlur","useListItemFocus","shouldForceHoverItem","createElement","StyledListItem","as","motion","div","animate","height","opacity","className","exit","initial","key","layout","$backgroundColor","$isClickable","$isInAccordion","shouldDisableListItemPadding","$isOpen","$isWrapped","$isInDialog","$isSelected","$shouldChangeColor","shouldChangeColor","$shouldForceBackground","$shouldForceBottomLine","$shouldHideBottomLine","$shouldHideIndicator","$shouldShowSeparatorBelow","onKeyDown","onFocus","onBlur","shouldUseFullWidth","isDisabled","item","StyledListItemTooltip","style","cursor","onTitleWidthChange","AnimatePresence","id","shouldHideBody","displayName","_default","exports"],"sources":["../../../../../src/components/list/list-item/ListItem.tsx"],"sourcesContent":["import { AnimatePresence, motion } from 'motion/react';\nimport React, {\n ChangeEventHandler,\n CSSProperties,\n forwardRef,\n KeyboardEvent,\n MouseEventHandler,\n ReactNode,\n SyntheticEvent,\n TouchEventHandler,\n useCallback,\n useContext,\n useEffect,\n useImperativeHandle,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport { useTheme } from 'styled-components';\nimport { useUuid } from '../../../hooks/uuid';\nimport type { IListItemRightElements } from '../../../types/list';\nimport type { InputProps } from '../../input/Input';\nimport { AccordionContext } from '../../accordion/Accordion';\nimport AreaContextProvider, { AreaContext } from '../../area-provider/AreaContextProvider';\nimport { type Theme, useColorScheme } from '../../color-scheme-provider/ColorSchemeProvider';\nimport { ListContext } from '../List';\nimport {\n handleHorizontalArrowNavigation,\n handleListItemTabNavigation,\n handleListItemToggleKey,\n handleVerticalListGroupNavigation,\n} from '../List.utils';\nimport ListItemBody from './list-item-body/ListItemBody';\nimport ListItemHead from './list-item-head/ListItemHead';\nimport { StyledListItem, StyledListItemTooltip } from './ListItem.styles';\nimport Tooltip from '../../tooltip/Tooltip';\nimport { useIsInsideDialog } from '../../../hooks/element';\nimport { useFocusRingPortal } from '../../../hooks/useFocusRingPortal';\nimport { useKeyboardFocusHighlighting } from '../../../hooks/useKeyboardFocusHighlighting';\nimport { useListItemFocus } from './useListItemFocus';\n\nexport type ListItemElements = [ReactNode, ...ReactNode[]];\n\nexport interface ListItemSize {\n titleWidth: number;\n titleMaxWidth: number;\n}\n\nexport type ListItemProps = {\n /**\n * The background color of the `ListItem`.\n */\n backgroundColor?: CSSProperties['backgroundColor'];\n /**\n * DEPRECATED: Use `cornerImage` instead.\n */\n careOfLocationId?: number;\n /**\n * The content of the `ListItem` body. When the `ListItem` has children,\n * it can be opened and also gets an icon as an indicator automatically.\n */\n children?: ReactNode;\n /**\n * The image that is displayed in the bottom right corner of the grouped image of list item.\n */\n cornerImage?: string;\n /**\n * Element that is displayed when hovering over the `ListItem` on the right\n * side. On mobile devices, this element is not displayed.\n */\n hoverItem?: ReactNode;\n /**\n * The FontAwesome or tobit icons to render like an image on the left side\n * of the header. Multiple icons are stacked. See the `Icon` component\n * documentation for more information.\n */\n icons?: string[];\n /**\n * The background of the image. This is only used if images are passed.\n */\n imageBackground?: CSSProperties['background'];\n /**\n * A list of image URLs that are displayed on the left side of the header.\n * If multiple URLs are passed, the image is assembled from the first three\n * image URLs as a puzzle.\n */\n images?: string[];\n /**\n * This can be used to automatically expand the `ListItem` during the first render.\n */\n isDefaultOpen?: boolean;\n /**\n * This overrides the internal opening state of the item and makes it controlled.\n */\n isOpen?: boolean;\n /**\n * Whether the ListItem locks disabled but has full functionality.\n */\n isTitleGreyed?: boolean;\n /**\n * Whether the item is selected.\n */\n isSelected?: boolean;\n /**\n * Elements that are displayed on the left side of the header. If multiple\n * elements are specified, they are displayed one aside the other.\n */\n leftElements?: ListItemElements;\n /**\n * Function to be executed when the header of the `ListItem` was clicked\n */\n onClick?: MouseEventHandler<HTMLDivElement>;\n /**\n * Function to be executed when the ListItem is closed.\n */\n onClose?: VoidFunction;\n /**\n * Function to be executed when the header of the `ListItem` is pressed for\n * 400 milliseconds.\n */\n onLongPress?: TouchEventHandler<HTMLDivElement>;\n /**\n * Function to be executed when the ListItem is opened.\n */\n onOpen?: VoidFunction;\n /**\n * Elements that are displayed on the right side of the header. If multiple\n * elements are specified, they are displayed one below the other.\n */\n rightElements?: IListItemRightElements;\n /**\n * This will force the background color of the ListItem to be used even if it is closed and not hovered.\n */\n shouldForceBackground?: boolean;\n /**\n * Whether the line should be forced, e.g., so that it is also displayed if the item is the last element in the list.\n */\n shouldForceBottomLine?: boolean;\n /**\n * Whether the hover item should be forced.\n */\n shouldForceHover?: boolean;\n /**\n * Whether the bottom line should be hidden.\n */\n shouldHideBottomLine?: boolean;\n /**\n * Whether the background and border of the shape on which the image or icon of the element is displayed should be\n * hidden.\n */\n shouldHideImageOrIconBackground?: boolean;\n /**\n * If the `ListItem` is expandable, the indicator is displayed on the left\n * side of the header. If this property is set to true, the indicator is\n * hidden.\n */\n shouldHideIndicator?: boolean;\n /**\n * Whether the image should be opened on click.\n */\n shouldOpenImageOnClick?: boolean;\n /**\n * Whether the layout animation should be prevented. This is useful when the\n * `ListItem` is used in a list with a lot of items and the layout animation\n * is not desired.\n */\n shouldPreventLayoutAnimation?: boolean;\n /**\n * This will render the ListItem closed on the first render.\n */\n shouldRenderClosed?: boolean;\n /**\n * Whether the image or icon should be displayed in a round shape. This should always be used for images of persons.\n */\n shouldShowRoundImageOrIcon?: boolean;\n /**\n * Whether a separator should be displayed below this item. In this case, the border is displayed thicker than normal.\n */\n shouldShowSeparatorBelow?: boolean;\n /**\n * Whether a Tooltip should be displayed on hover if the title is cut.\n */\n shouldShowTooltipOnTitleOverflow?: boolean;\n /**\n * Subtitle of the `ListItem` displayed in the head below the title\n */\n subtitle?: ReactNode;\n /**\n * Title of the `ListItem` displayed in the head\n */\n title: ReactNode;\n /**\n * Additional elements to be displayed in the header next to the title.\n */\n titleElement?: ReactNode;\n /**\n * Whether the ListItem Animation should be disabled.\n */\n shouldDisableAnimation?: boolean;\n /**\n * Optional Element to display in the right corner of the image\n */\n cornerElement?: ReactNode;\n /**\n * Optional handler for image load errors.\n */\n onImageError?: (event: SyntheticEvent<HTMLImageElement, Event>, index: number) => void;\n /**\n * Function to be executed if the size are changed.\n */\n onSizeChange?: (sizes: ListItemSize) => void;\n /**\n * Enables keyboard-only focus highlighting. Overrides the value from the List context.\n */\n shouldEnableKeyboardHighlighting?: boolean;\n /**\n * Function that is executed when the text of the title input changes.\n * When this function is given, the title is displayed as an input.\n */\n onTitleInputChange?: ChangeEventHandler<HTMLInputElement>;\n /**\n * The props of the title input.\n */\n titleInputProps?: InputProps;\n};\n\nexport type ListItemRef = ListItemSize;\n\nconst ListItem = forwardRef<ListItemRef, ListItemProps>(\n (\n {\n backgroundColor,\n careOfLocationId,\n children,\n cornerImage,\n hoverItem,\n icons,\n imageBackground,\n images,\n isDefaultOpen,\n isOpen,\n isTitleGreyed,\n leftElements,\n onClick,\n onClose,\n onLongPress,\n onOpen,\n rightElements,\n shouldShowTooltipOnTitleOverflow = false,\n shouldForceBackground = false,\n shouldForceBottomLine = false,\n shouldForceHover = false,\n shouldHideBottomLine = false,\n shouldOpenImageOnClick = false,\n shouldHideImageOrIconBackground,\n shouldHideIndicator = false,\n shouldPreventLayoutAnimation = false,\n shouldRenderClosed = false,\n shouldShowRoundImageOrIcon,\n shouldShowSeparatorBelow = false,\n subtitle,\n title,\n onImageError,\n onSizeChange,\n onTitleInputChange,\n titleElement,\n titleInputProps,\n shouldDisableAnimation = false,\n cornerElement,\n isSelected = false,\n shouldEnableKeyboardHighlighting: shouldEnableKeyboardHighlightingProp,\n },\n ref,\n ) => {\n const {\n isAnyItemExpandable,\n isWrapped,\n openItemUuid,\n updateOpenItemUuid,\n shouldEnableKeyboardHighlighting: shouldEnableKeyboardHighlightingContext,\n listGroupUuid,\n listItemUuids,\n registerListItemUuid,\n unregisterListItemUuid,\n activeListItemUuid,\n updateActiveListItemUuid,\n } = useContext(ListContext);\n const colorScheme = useColorScheme();\n const theme = useTheme() as Theme;\n const isInsideListContext = typeof listGroupUuid === 'string';\n\n const shouldEnableKeyboardHighlighting =\n shouldEnableKeyboardHighlightingProp ??\n (isInsideListContext\n ? shouldEnableKeyboardHighlightingContext\n : (colorScheme?.shouldEnableKeyboardHighlighting ?? false));\n\n const { isWrapped: isParentAccordionWrapped } = useContext(AccordionContext);\n\n const areaProvider = useContext(AreaContext);\n\n const isInitialRenderRef = useRef(true);\n\n const listItemRef = useRef<HTMLDivElement>(null);\n\n const isInDialog = useIsInsideDialog<HTMLDivElement>(listItemRef);\n\n const uuid = useUuid();\n\n const isExpandable = children !== undefined;\n const isItemOpen = isOpen ?? openItemUuid === uuid;\n\n const onCloseRef = useRef(onClose);\n const onOpenRef = useRef(onOpen);\n\n const [shouldEnableTooltip, setShouldEnableTooltip] = useState(false);\n const [titleWidth, setTitleWidth] = useState(0);\n const [titleMaxWidth, setTitleMaxWidth] = useState(0);\n\n useEffect(() => {\n onCloseRef.current = onClose;\n onOpenRef.current = onOpen;\n }, [isOpen, onClose, onOpen]);\n\n useEffect(() => {\n if (isInitialRenderRef.current) {\n isInitialRenderRef.current = false;\n } else if (isItemOpen) {\n if (typeof onOpenRef.current === 'function') {\n onOpenRef.current();\n }\n } else if (typeof onCloseRef.current === 'function') {\n onCloseRef.current();\n }\n }, [isItemOpen]);\n\n const handleHeadClick = useCallback<MouseEventHandler<HTMLDivElement>>(\n (event) => {\n if (isExpandable) {\n updateOpenItemUuid(uuid);\n }\n\n if (typeof onClick === 'function') {\n onClick(event);\n }\n },\n [isExpandable, onClick, updateOpenItemUuid, uuid],\n );\n\n useEffect(() => {\n if (isDefaultOpen) {\n updateOpenItemUuid(uuid, { shouldOnlyOpen: true });\n }\n }, [isDefaultOpen, updateOpenItemUuid, uuid]);\n\n const isClickable = typeof onClick === 'function' || isExpandable;\n\n useEffect(() => {\n if (typeof onSizeChange === 'function') {\n onSizeChange({\n titleWidth,\n titleMaxWidth,\n });\n }\n }, [onSizeChange, titleMaxWidth, titleWidth]);\n\n useImperativeHandle(\n ref,\n () => ({\n titleWidth,\n titleMaxWidth,\n }),\n [titleMaxWidth, titleWidth],\n );\n\n const handleTitleWidthChange = useCallback((width: number, maxWidth: number) => {\n setTitleWidth(width);\n setTitleMaxWidth(maxWidth);\n }, []);\n\n const shouldShowKeyboardHighlighting = useKeyboardFocusHighlighting(\n shouldEnableKeyboardHighlighting,\n );\n useFocusRingPortal(listItemRef, {\n isEnabled: shouldShowKeyboardHighlighting,\n borderRadius: `${theme.cardBorderRadius}px`,\n });\n\n const isInKeyboardNavigationGroup =\n shouldEnableKeyboardHighlighting &&\n typeof listGroupUuid === 'string' &&\n typeof updateActiveListItemUuid === 'function';\n\n useEffect(() => {\n if (\n shouldEnableKeyboardHighlighting &&\n typeof registerListItemUuid === 'function' &&\n typeof unregisterListItemUuid === 'function'\n ) {\n registerListItemUuid(uuid);\n\n return () => {\n unregisterListItemUuid(uuid);\n };\n }\n\n return undefined;\n }, [shouldEnableKeyboardHighlighting, registerListItemUuid, unregisterListItemUuid, uuid]);\n\n const tabIndex = useMemo(\n () => (shouldEnableKeyboardHighlighting ? 0 : -1),\n [shouldEnableKeyboardHighlighting],\n );\n\n const handleKeyDown = useCallback(\n (event: KeyboardEvent<HTMLDivElement>) => {\n const isCurrentListItemTarget = event.currentTarget === event.target;\n const currentListItemElement = event.currentTarget as HTMLDivElement;\n const targetElement = event.target as HTMLElement | null;\n\n [\n () =>\n shouldEnableKeyboardHighlighting &&\n handleHorizontalArrowNavigation({\n event,\n currentListItemElement,\n targetElement,\n isCurrentListItemTarget,\n }),\n () =>\n handleListItemTabNavigation({\n event,\n currentListItemElement,\n targetElement,\n isCurrentListItemTarget,\n isInKeyboardNavigationGroup,\n listItemUuids,\n currentUuid: uuid,\n listGroupUuid,\n updateActiveListItemUuid,\n }),\n () =>\n handleVerticalListGroupNavigation({\n event,\n isCurrentListItemTarget,\n isInKeyboardNavigationGroup,\n listItemUuids,\n currentUuid: uuid,\n listGroupUuid,\n updateActiveListItemUuid,\n }),\n () =>\n handleListItemToggleKey({\n event,\n isCurrentListItemTarget,\n isExpandable,\n isItemOpen,\n shouldEnableKeyboardHighlighting,\n toggleItem: () =>\n handleHeadClick(\n event as unknown as React.MouseEvent<HTMLDivElement>,\n ),\n }),\n ].some((handleKey) => handleKey());\n },\n [\n handleHeadClick,\n isExpandable,\n isInKeyboardNavigationGroup,\n isItemOpen,\n listGroupUuid,\n listItemUuids,\n shouldEnableKeyboardHighlighting,\n updateActiveListItemUuid,\n uuid,\n ],\n );\n\n const { isFocusWithinListItem, handleFocus, handleBlur } = useListItemFocus({\n uuid,\n listGroupUuid,\n isInKeyboardNavigationGroup,\n updateActiveListItemUuid,\n });\n const shouldForceHoverItem = shouldForceHover || isFocusWithinListItem;\n\n useEffect(() => {\n if (\n isInKeyboardNavigationGroup &&\n activeListItemUuid == null &&\n typeof updateActiveListItemUuid === 'function' &&\n listItemUuids?.[0] === uuid\n ) {\n updateActiveListItemUuid(uuid);\n }\n }, [\n activeListItemUuid,\n isInKeyboardNavigationGroup,\n listItemUuids,\n updateActiveListItemUuid,\n uuid,\n ]);\n\n return (\n <StyledListItem\n as={shouldDisableAnimation ? undefined : motion.div}\n animate={shouldDisableAnimation ? undefined : { height: 'auto', opacity: 1 }}\n className=\"beta-chayns-list-item\"\n exit={shouldDisableAnimation ? undefined : { height: 0, opacity: 0 }}\n initial={shouldDisableAnimation ? undefined : { height: 0, opacity: 0 }}\n key={`list-item-${uuid}`}\n ref={listItemRef}\n data-uuid={`${listGroupUuid ?? ''}---${uuid}`}\n layout={\n shouldPreventLayoutAnimation || shouldDisableAnimation ? undefined : 'position'\n }\n $backgroundColor={backgroundColor}\n $isClickable={isClickable}\n $isInAccordion={\n typeof isParentAccordionWrapped === 'boolean' &&\n !areaProvider.shouldDisableListItemPadding\n }\n $isOpen={isItemOpen}\n $isWrapped={isWrapped}\n $isInDialog={isInDialog}\n $isSelected={isSelected}\n $shouldChangeColor={areaProvider.shouldChangeColor}\n $shouldForceBackground={shouldForceBackground}\n $shouldForceBottomLine={shouldForceBottomLine}\n $shouldHideBottomLine={shouldHideBottomLine}\n $shouldHideIndicator={shouldHideIndicator}\n $shouldShowSeparatorBelow={shouldShowSeparatorBelow}\n data-should-show-keyboard-highlighting={\n shouldShowKeyboardHighlighting ? 'true' : undefined\n }\n tabIndex={tabIndex}\n onKeyDown={handleKeyDown}\n onFocus={handleFocus}\n onBlur={handleBlur}\n >\n <Tooltip\n shouldUseFullWidth\n isDisabled={!shouldShowTooltipOnTitleOverflow || !shouldEnableTooltip}\n item={\n <StyledListItemTooltip\n style={{ cursor: 'default' }}\n key={`list-item-tooltip-${uuid}`}\n >\n {title}\n </StyledListItemTooltip>\n }\n >\n <ListItemHead\n hoverItem={hoverItem}\n careOfLocationId={careOfLocationId}\n cornerElement={cornerElement}\n cornerImage={cornerImage}\n icons={icons}\n imageBackground={imageBackground}\n images={images}\n isAnyItemExpandable={isAnyItemExpandable}\n isExpandable={isExpandable}\n isOpen={isItemOpen}\n isTitleGreyed={isTitleGreyed}\n leftElements={leftElements}\n onClick={isClickable ? handleHeadClick : undefined}\n onLongPress={onLongPress}\n shouldForceHover={shouldForceHoverItem}\n rightElements={rightElements}\n shouldHideImageOrIconBackground={shouldHideImageOrIconBackground}\n shouldHideIndicator={shouldHideIndicator}\n shouldOpenImageOnClick={shouldOpenImageOnClick}\n shouldShowRoundImageOrIcon={shouldShowRoundImageOrIcon}\n subtitle={subtitle}\n title={title}\n onTitleInputChange={onTitleInputChange}\n onTitleWidthChange={handleTitleWidthChange}\n titleInputProps={titleInputProps}\n titleElement={titleElement}\n setShouldEnableTooltip={setShouldEnableTooltip}\n shouldDisableAnimation={shouldDisableAnimation}\n onImageError={onImageError}\n />\n </Tooltip>\n <AnimatePresence initial={false}>\n {isExpandable && (isItemOpen || shouldRenderClosed) && (\n <ListItemBody\n id={uuid}\n key={`listItemBody-${uuid}`}\n shouldHideBody={shouldRenderClosed && !isItemOpen}\n >\n <AreaContextProvider>{children}</AreaContextProvider>\n </ListItemBody>\n )}\n </AnimatePresence>\n </StyledListItem>\n );\n },\n);\n\nListItem.displayName = 'ListItem';\n\nexport default ListItem;\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"ListItem.js","names":["_react","require","_react2","_interopRequireWildcard","_styledComponents","_uuid","_Accordion","_AreaContextProvider","_ColorSchemeProvider","_List","_List2","_ListItemBody","_interopRequireDefault","_ListItemHead","_ListItem","_Tooltip","_element","_useFocusRingPortal","_useKeyboardFocusHighlighting","_useListItemFocus","e","__esModule","default","t","WeakMap","r","n","o","i","f","__proto__","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","ListItem","forwardRef","backgroundColor","careOfLocationId","children","cornerImage","hoverItem","icons","imageBackground","images","isDefaultOpen","isOpen","isTitleGreyed","leftElements","onClick","onClose","onLongPress","onOpen","rightElements","shouldShowTooltipOnTitleOverflow","shouldForceBackground","shouldForceBottomLine","shouldForceHover","shouldHideBottomLine","shouldOpenImageOnClick","shouldHideImageOrIconBackground","shouldHideIndicator","shouldAnimateLayout","shouldPreventLayoutAnimation","shouldRenderClosed","shouldShowRoundImageOrIcon","shouldShowSeparatorBelow","subtitle","title","onImageError","onSizeChange","onTitleInputChange","titleElement","titleInputProps","shouldDisableAnimation","cornerElement","isSelected","shouldEnableKeyboardHighlighting","shouldEnableKeyboardHighlightingProp","ref","isAnyItemExpandable","isWrapped","openItemUuid","updateOpenItemUuid","shouldEnableKeyboardHighlightingContext","listGroupUuid","listItemUuids","registerListItemUuid","unregisterListItemUuid","activeListItemUuid","updateActiveListItemUuid","useContext","ListContext","colorScheme","useColorScheme","theme","useTheme","isInsideListContext","isParentAccordionWrapped","AccordionContext","areaProvider","AreaContext","isInitialRenderRef","useRef","listItemRef","isInDialog","useIsInsideDialog","uuid","useUuid","isExpandable","undefined","isItemOpen","onCloseRef","onOpenRef","shouldEnableTooltip","setShouldEnableTooltip","useState","titleWidth","setTitleWidth","titleMaxWidth","setTitleMaxWidth","useEffect","current","handleHeadClick","useCallback","event","shouldOnlyOpen","isClickable","useImperativeHandle","handleTitleWidthChange","width","maxWidth","shouldShowKeyboardHighlighting","useKeyboardFocusHighlighting","useFocusRingPortal","isEnabled","borderRadius","cardBorderRadius","isInKeyboardNavigationGroup","tabIndex","useMemo","handleKeyDown","isCurrentListItemTarget","currentTarget","target","currentListItemElement","targetElement","handleHorizontalArrowNavigation","handleListItemTabNavigation","currentUuid","handleVerticalListGroupNavigation","handleListItemToggleKey","toggleItem","some","handleKey","isFocusWithinListItem","handleFocus","handleBlur","useListItemFocus","shouldForceHoverItem","createElement","StyledListItem","as","motion","div","animate","height","opacity","className","exit","initial","key","layout","$backgroundColor","$isClickable","$isInAccordion","shouldDisableListItemPadding","$isOpen","$isWrapped","$isInDialog","$isSelected","$shouldChangeColor","shouldChangeColor","$shouldForceBackground","$shouldForceBottomLine","$shouldHideBottomLine","$shouldHideIndicator","$shouldShowSeparatorBelow","onKeyDown","onFocus","onBlur","shouldUseFullWidth","isDisabled","item","StyledListItemTooltip","style","cursor","onTitleWidthChange","AnimatePresence","id","shouldHideBody","displayName","_default","exports"],"sources":["../../../../../src/components/list/list-item/ListItem.tsx"],"sourcesContent":["import { AnimatePresence, motion } from 'motion/react';\nimport React, {\n ChangeEventHandler,\n CSSProperties,\n forwardRef,\n KeyboardEvent,\n MouseEventHandler,\n ReactNode,\n SyntheticEvent,\n TouchEventHandler,\n useCallback,\n useContext,\n useEffect,\n useImperativeHandle,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport { useTheme } from 'styled-components';\nimport { useUuid } from '../../../hooks/uuid';\nimport type { IListItemRightElements } from '../../../types/list';\nimport type { InputProps } from '../../input/Input';\nimport { AccordionContext } from '../../accordion/Accordion';\nimport AreaContextProvider, { AreaContext } from '../../area-provider/AreaContextProvider';\nimport { type Theme, useColorScheme } from '../../color-scheme-provider/ColorSchemeProvider';\nimport { ListContext } from '../List';\nimport {\n handleHorizontalArrowNavigation,\n handleListItemTabNavigation,\n handleListItemToggleKey,\n handleVerticalListGroupNavigation,\n} from '../List.utils';\nimport ListItemBody from './list-item-body/ListItemBody';\nimport ListItemHead from './list-item-head/ListItemHead';\nimport { StyledListItem, StyledListItemTooltip } from './ListItem.styles';\nimport Tooltip from '../../tooltip/Tooltip';\nimport { useIsInsideDialog } from '../../../hooks/element';\nimport { useFocusRingPortal } from '../../../hooks/useFocusRingPortal';\nimport { useKeyboardFocusHighlighting } from '../../../hooks/useKeyboardFocusHighlighting';\nimport { useListItemFocus } from './useListItemFocus';\n\nexport type ListItemElements = [ReactNode, ...ReactNode[]];\n\nexport interface ListItemSize {\n titleWidth: number;\n titleMaxWidth: number;\n}\n\nexport type ListItemProps = {\n /**\n * The background color of the `ListItem`.\n */\n backgroundColor?: CSSProperties['backgroundColor'];\n /**\n * DEPRECATED: Use `cornerImage` instead.\n */\n careOfLocationId?: number;\n /**\n * The content of the `ListItem` body. When the `ListItem` has children,\n * it can be opened and also gets an icon as an indicator automatically.\n */\n children?: ReactNode;\n /**\n * The image that is displayed in the bottom right corner of the grouped image of list item.\n */\n cornerImage?: string;\n /**\n * Element that is displayed when hovering over the `ListItem` on the right\n * side. On mobile devices, this element is not displayed.\n */\n hoverItem?: ReactNode;\n /**\n * The FontAwesome or tobit icons to render like an image on the left side\n * of the header. Multiple icons are stacked. See the `Icon` component\n * documentation for more information.\n */\n icons?: string[];\n /**\n * The background of the image. This is only used if images are passed.\n */\n imageBackground?: CSSProperties['background'];\n /**\n * A list of image URLs that are displayed on the left side of the header.\n * If multiple URLs are passed, the image is assembled from the first three\n * image URLs as a puzzle.\n */\n images?: string[];\n /**\n * This can be used to automatically expand the `ListItem` during the first render.\n */\n isDefaultOpen?: boolean;\n /**\n * This overrides the internal opening state of the item and makes it controlled.\n */\n isOpen?: boolean;\n /**\n * Whether the ListItem locks disabled but has full functionality.\n */\n isTitleGreyed?: boolean;\n /**\n * Whether the item is selected.\n */\n isSelected?: boolean;\n /**\n * Elements that are displayed on the left side of the header. If multiple\n * elements are specified, they are displayed one aside the other.\n */\n leftElements?: ListItemElements;\n /**\n * Function to be executed when the header of the `ListItem` was clicked\n */\n onClick?: MouseEventHandler<HTMLDivElement>;\n /**\n * Function to be executed when the ListItem is closed.\n */\n onClose?: VoidFunction;\n /**\n * Function to be executed when the header of the `ListItem` is pressed for\n * 400 milliseconds.\n */\n onLongPress?: TouchEventHandler<HTMLDivElement>;\n /**\n * Function to be executed when the ListItem is opened.\n */\n onOpen?: VoidFunction;\n /**\n * Elements that are displayed on the right side of the header. If multiple\n * elements are specified, they are displayed one below the other.\n */\n rightElements?: IListItemRightElements;\n /**\n * This will force the background color of the ListItem to be used even if it is closed and not hovered.\n */\n shouldForceBackground?: boolean;\n /**\n * Whether the line should be forced, e.g., so that it is also displayed if the item is the last element in the list.\n */\n shouldForceBottomLine?: boolean;\n /**\n * Whether the hover item should be forced.\n */\n shouldForceHover?: boolean;\n /**\n * Whether the bottom line should be hidden.\n */\n shouldHideBottomLine?: boolean;\n /**\n * Whether the background and border of the shape on which the image or icon of the element is displayed should be\n * hidden.\n */\n shouldHideImageOrIconBackground?: boolean;\n /**\n * If the `ListItem` is expandable, the indicator is displayed on the left\n * side of the header. If this property is set to true, the indicator is\n * hidden.\n */\n shouldHideIndicator?: boolean;\n /**\n * Whether the image should be opened on click.\n */\n shouldOpenImageOnClick?: boolean;\n /**\n * Whether the framer-motion layout projection (`layout=\"position\"`) should be\n * enabled. This animates the `ListItem` smoothly into its new position when\n * sibling items are reordered, expanded or resized.\n *\n * This is opt-in and disabled by default, because framer-motions layout\n * projection is viewport-global: every layout change anywhere in the document\n * (window resize, height animation, ...) forces a re-measurement of **all**\n * layout-projection nodes via `getBoundingClientRect`. In lists with many\n * `ListItem`s this scales linearly and causes noticeable layout thrash. The\n * enter/exit height/opacity animation is unaffected and stays enabled.\n */\n shouldAnimateLayout?: boolean;\n /**\n * Whether the layout animation should be prevented. This is useful when the\n * `ListItem` is used in a list with a lot of items and the layout animation\n * is not desired.\n *\n * @deprecated The layout projection is now disabled by default. Use\n * `shouldAnimateLayout` to opt into it instead. When set to `true`, this\n * prop keeps forcing the layout projection off.\n */\n shouldPreventLayoutAnimation?: boolean;\n /**\n * This will render the ListItem closed on the first render.\n */\n shouldRenderClosed?: boolean;\n /**\n * Whether the image or icon should be displayed in a round shape. This should always be used for images of persons.\n */\n shouldShowRoundImageOrIcon?: boolean;\n /**\n * Whether a separator should be displayed below this item. In this case, the border is displayed thicker than normal.\n */\n shouldShowSeparatorBelow?: boolean;\n /**\n * Whether a Tooltip should be displayed on hover if the title is cut.\n */\n shouldShowTooltipOnTitleOverflow?: boolean;\n /**\n * Subtitle of the `ListItem` displayed in the head below the title\n */\n subtitle?: ReactNode;\n /**\n * Title of the `ListItem` displayed in the head\n */\n title: ReactNode;\n /**\n * Additional elements to be displayed in the header next to the title.\n */\n titleElement?: ReactNode;\n /**\n * Whether the ListItem Animation should be disabled.\n */\n shouldDisableAnimation?: boolean;\n /**\n * Optional Element to display in the right corner of the image\n */\n cornerElement?: ReactNode;\n /**\n * Optional handler for image load errors.\n */\n onImageError?: (event: SyntheticEvent<HTMLImageElement, Event>, index: number) => void;\n /**\n * Function to be executed if the size are changed.\n */\n onSizeChange?: (sizes: ListItemSize) => void;\n /**\n * Enables keyboard-only focus highlighting. Overrides the value from the List context.\n */\n shouldEnableKeyboardHighlighting?: boolean;\n /**\n * Function that is executed when the text of the title input changes.\n * When this function is given, the title is displayed as an input.\n */\n onTitleInputChange?: ChangeEventHandler<HTMLInputElement>;\n /**\n * The props of the title input.\n */\n titleInputProps?: InputProps;\n};\n\nexport type ListItemRef = ListItemSize;\n\nconst ListItem = forwardRef<ListItemRef, ListItemProps>(\n (\n {\n backgroundColor,\n careOfLocationId,\n children,\n cornerImage,\n hoverItem,\n icons,\n imageBackground,\n images,\n isDefaultOpen,\n isOpen,\n isTitleGreyed,\n leftElements,\n onClick,\n onClose,\n onLongPress,\n onOpen,\n rightElements,\n shouldShowTooltipOnTitleOverflow = false,\n shouldForceBackground = false,\n shouldForceBottomLine = false,\n shouldForceHover = false,\n shouldHideBottomLine = false,\n shouldOpenImageOnClick = false,\n shouldHideImageOrIconBackground,\n shouldHideIndicator = false,\n shouldAnimateLayout = false,\n shouldPreventLayoutAnimation = false,\n shouldRenderClosed = false,\n shouldShowRoundImageOrIcon,\n shouldShowSeparatorBelow = false,\n subtitle,\n title,\n onImageError,\n onSizeChange,\n onTitleInputChange,\n titleElement,\n titleInputProps,\n shouldDisableAnimation = false,\n cornerElement,\n isSelected = false,\n shouldEnableKeyboardHighlighting: shouldEnableKeyboardHighlightingProp,\n },\n ref,\n ) => {\n const {\n isAnyItemExpandable,\n isWrapped,\n openItemUuid,\n updateOpenItemUuid,\n shouldEnableKeyboardHighlighting: shouldEnableKeyboardHighlightingContext,\n listGroupUuid,\n listItemUuids,\n registerListItemUuid,\n unregisterListItemUuid,\n activeListItemUuid,\n updateActiveListItemUuid,\n } = useContext(ListContext);\n const colorScheme = useColorScheme();\n const theme = useTheme() as Theme;\n const isInsideListContext = typeof listGroupUuid === 'string';\n\n const shouldEnableKeyboardHighlighting =\n shouldEnableKeyboardHighlightingProp ??\n (isInsideListContext\n ? shouldEnableKeyboardHighlightingContext\n : (colorScheme?.shouldEnableKeyboardHighlighting ?? false));\n\n const { isWrapped: isParentAccordionWrapped } = useContext(AccordionContext);\n\n const areaProvider = useContext(AreaContext);\n\n const isInitialRenderRef = useRef(true);\n\n const listItemRef = useRef<HTMLDivElement>(null);\n\n const isInDialog = useIsInsideDialog<HTMLDivElement>(listItemRef);\n\n const uuid = useUuid();\n\n const isExpandable = children !== undefined;\n const isItemOpen = isOpen ?? openItemUuid === uuid;\n\n const onCloseRef = useRef(onClose);\n const onOpenRef = useRef(onOpen);\n\n const [shouldEnableTooltip, setShouldEnableTooltip] = useState(false);\n const [titleWidth, setTitleWidth] = useState(0);\n const [titleMaxWidth, setTitleMaxWidth] = useState(0);\n\n useEffect(() => {\n onCloseRef.current = onClose;\n onOpenRef.current = onOpen;\n }, [isOpen, onClose, onOpen]);\n\n useEffect(() => {\n if (isInitialRenderRef.current) {\n isInitialRenderRef.current = false;\n } else if (isItemOpen) {\n if (typeof onOpenRef.current === 'function') {\n onOpenRef.current();\n }\n } else if (typeof onCloseRef.current === 'function') {\n onCloseRef.current();\n }\n }, [isItemOpen]);\n\n const handleHeadClick = useCallback<MouseEventHandler<HTMLDivElement>>(\n (event) => {\n if (isExpandable) {\n updateOpenItemUuid(uuid);\n }\n\n if (typeof onClick === 'function') {\n onClick(event);\n }\n },\n [isExpandable, onClick, updateOpenItemUuid, uuid],\n );\n\n useEffect(() => {\n if (isDefaultOpen) {\n updateOpenItemUuid(uuid, { shouldOnlyOpen: true });\n }\n }, [isDefaultOpen, updateOpenItemUuid, uuid]);\n\n const isClickable = typeof onClick === 'function' || isExpandable;\n\n useEffect(() => {\n if (typeof onSizeChange === 'function') {\n onSizeChange({\n titleWidth,\n titleMaxWidth,\n });\n }\n }, [onSizeChange, titleMaxWidth, titleWidth]);\n\n useImperativeHandle(\n ref,\n () => ({\n titleWidth,\n titleMaxWidth,\n }),\n [titleMaxWidth, titleWidth],\n );\n\n const handleTitleWidthChange = useCallback((width: number, maxWidth: number) => {\n setTitleWidth(width);\n setTitleMaxWidth(maxWidth);\n }, []);\n\n const shouldShowKeyboardHighlighting = useKeyboardFocusHighlighting(\n shouldEnableKeyboardHighlighting,\n );\n useFocusRingPortal(listItemRef, {\n isEnabled: shouldShowKeyboardHighlighting,\n borderRadius: `${theme.cardBorderRadius}px`,\n });\n\n const isInKeyboardNavigationGroup =\n shouldEnableKeyboardHighlighting &&\n typeof listGroupUuid === 'string' &&\n typeof updateActiveListItemUuid === 'function';\n\n useEffect(() => {\n if (\n shouldEnableKeyboardHighlighting &&\n typeof registerListItemUuid === 'function' &&\n typeof unregisterListItemUuid === 'function'\n ) {\n registerListItemUuid(uuid);\n\n return () => {\n unregisterListItemUuid(uuid);\n };\n }\n\n return undefined;\n }, [shouldEnableKeyboardHighlighting, registerListItemUuid, unregisterListItemUuid, uuid]);\n\n const tabIndex = useMemo(\n () => (shouldEnableKeyboardHighlighting ? 0 : -1),\n [shouldEnableKeyboardHighlighting],\n );\n\n const handleKeyDown = useCallback(\n (event: KeyboardEvent<HTMLDivElement>) => {\n const isCurrentListItemTarget = event.currentTarget === event.target;\n const currentListItemElement = event.currentTarget as HTMLDivElement;\n const targetElement = event.target as HTMLElement | null;\n\n [\n () =>\n shouldEnableKeyboardHighlighting &&\n handleHorizontalArrowNavigation({\n event,\n currentListItemElement,\n targetElement,\n isCurrentListItemTarget,\n }),\n () =>\n handleListItemTabNavigation({\n event,\n currentListItemElement,\n targetElement,\n isCurrentListItemTarget,\n isInKeyboardNavigationGroup,\n listItemUuids,\n currentUuid: uuid,\n listGroupUuid,\n updateActiveListItemUuid,\n }),\n () =>\n handleVerticalListGroupNavigation({\n event,\n isCurrentListItemTarget,\n isInKeyboardNavigationGroup,\n listItemUuids,\n currentUuid: uuid,\n listGroupUuid,\n updateActiveListItemUuid,\n }),\n () =>\n handleListItemToggleKey({\n event,\n isCurrentListItemTarget,\n isExpandable,\n isItemOpen,\n shouldEnableKeyboardHighlighting,\n toggleItem: () =>\n handleHeadClick(\n event as unknown as React.MouseEvent<HTMLDivElement>,\n ),\n }),\n ].some((handleKey) => handleKey());\n },\n [\n handleHeadClick,\n isExpandable,\n isInKeyboardNavigationGroup,\n isItemOpen,\n listGroupUuid,\n listItemUuids,\n shouldEnableKeyboardHighlighting,\n updateActiveListItemUuid,\n uuid,\n ],\n );\n\n const { isFocusWithinListItem, handleFocus, handleBlur } = useListItemFocus({\n uuid,\n listGroupUuid,\n isInKeyboardNavigationGroup,\n updateActiveListItemUuid,\n });\n const shouldForceHoverItem = shouldForceHover || isFocusWithinListItem;\n\n useEffect(() => {\n if (\n isInKeyboardNavigationGroup &&\n activeListItemUuid == null &&\n typeof updateActiveListItemUuid === 'function' &&\n listItemUuids?.[0] === uuid\n ) {\n updateActiveListItemUuid(uuid);\n }\n }, [\n activeListItemUuid,\n isInKeyboardNavigationGroup,\n listItemUuids,\n updateActiveListItemUuid,\n uuid,\n ]);\n\n return (\n <StyledListItem\n as={shouldDisableAnimation ? undefined : motion.div}\n animate={shouldDisableAnimation ? undefined : { height: 'auto', opacity: 1 }}\n className=\"beta-chayns-list-item\"\n exit={shouldDisableAnimation ? undefined : { height: 0, opacity: 0 }}\n initial={shouldDisableAnimation ? undefined : { height: 0, opacity: 0 }}\n key={`list-item-${uuid}`}\n ref={listItemRef}\n data-uuid={`${listGroupUuid ?? ''}---${uuid}`}\n layout={\n shouldAnimateLayout && !shouldPreventLayoutAnimation && !shouldDisableAnimation\n ? 'position'\n : undefined\n }\n $backgroundColor={backgroundColor}\n $isClickable={isClickable}\n $isInAccordion={\n typeof isParentAccordionWrapped === 'boolean' &&\n !areaProvider.shouldDisableListItemPadding\n }\n $isOpen={isItemOpen}\n $isWrapped={isWrapped}\n $isInDialog={isInDialog}\n $isSelected={isSelected}\n $shouldChangeColor={areaProvider.shouldChangeColor}\n $shouldForceBackground={shouldForceBackground}\n $shouldForceBottomLine={shouldForceBottomLine}\n $shouldHideBottomLine={shouldHideBottomLine}\n $shouldHideIndicator={shouldHideIndicator}\n $shouldShowSeparatorBelow={shouldShowSeparatorBelow}\n data-should-show-keyboard-highlighting={\n shouldShowKeyboardHighlighting ? 'true' : undefined\n }\n tabIndex={tabIndex}\n onKeyDown={handleKeyDown}\n onFocus={handleFocus}\n onBlur={handleBlur}\n >\n <Tooltip\n shouldUseFullWidth\n isDisabled={!shouldShowTooltipOnTitleOverflow || !shouldEnableTooltip}\n item={\n <StyledListItemTooltip\n style={{ cursor: 'default' }}\n key={`list-item-tooltip-${uuid}`}\n >\n {title}\n </StyledListItemTooltip>\n }\n >\n <ListItemHead\n hoverItem={hoverItem}\n careOfLocationId={careOfLocationId}\n cornerElement={cornerElement}\n cornerImage={cornerImage}\n icons={icons}\n imageBackground={imageBackground}\n images={images}\n isAnyItemExpandable={isAnyItemExpandable}\n isExpandable={isExpandable}\n isOpen={isItemOpen}\n isTitleGreyed={isTitleGreyed}\n leftElements={leftElements}\n onClick={isClickable ? handleHeadClick : undefined}\n onLongPress={onLongPress}\n shouldForceHover={shouldForceHoverItem}\n rightElements={rightElements}\n shouldHideImageOrIconBackground={shouldHideImageOrIconBackground}\n shouldHideIndicator={shouldHideIndicator}\n shouldOpenImageOnClick={shouldOpenImageOnClick}\n shouldShowRoundImageOrIcon={shouldShowRoundImageOrIcon}\n subtitle={subtitle}\n title={title}\n onTitleInputChange={onTitleInputChange}\n onTitleWidthChange={handleTitleWidthChange}\n titleInputProps={titleInputProps}\n titleElement={titleElement}\n setShouldEnableTooltip={setShouldEnableTooltip}\n shouldDisableAnimation={shouldDisableAnimation}\n shouldAnimateLayout={\n shouldAnimateLayout &&\n !shouldPreventLayoutAnimation &&\n !shouldDisableAnimation\n }\n onImageError={onImageError}\n />\n </Tooltip>\n <AnimatePresence initial={false}>\n {isExpandable && (isItemOpen || shouldRenderClosed) && (\n <ListItemBody\n id={uuid}\n key={`listItemBody-${uuid}`}\n shouldHideBody={shouldRenderClosed && !isItemOpen}\n >\n <AreaContextProvider>{children}</AreaContextProvider>\n </ListItemBody>\n )}\n </AnimatePresence>\n </StyledListItem>\n );\n },\n);\n\nListItem.displayName = 'ListItem';\n\nexport default ListItem;\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,137 @@
1
+ "use strict";
2
+
3
+ var _react = require("@testing-library/react");
4
+ var _react2 = require("motion/react");
5
+ var _react3 = _interopRequireDefault(require("react"));
6
+ var _styledComponents = require("styled-components");
7
+ var _vitest = require("vitest");
8
+ var _List = _interopRequireDefault(require("../List"));
9
+ var _ListItem = _interopRequireDefault(require("./ListItem"));
10
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
11
+ /* eslint-disable @typescript-eslint/no-unsafe-call */
12
+
13
+ _vitest.vi.mock('@chayns/textstrings', () => ({
14
+ useTranslation: () => ({
15
+ t: textString => typeof textString === 'string' ? textString : textString.fallback
16
+ })
17
+ }));
18
+
19
+ /**
20
+ * Regression guard for the framer-motion layout-projection thrash.
21
+ *
22
+ * framer-motions layout projection (`layout` / `layout="position"`) is
23
+ * viewport-global: all layout-projection nodes share a single projection tree, so
24
+ * a layout change on *any* node forces a re-measurement of *all* nodes via
25
+ * `getBoundingClientRect`. With many `ListItem`s this scales linearly with N.
26
+ *
27
+ * The tests below render a projection node (`motion.div layout`) *outside* the
28
+ * list and change its layout. They then count how many `getBoundingClientRect`
29
+ * calls hit the rendered `ListItem` elements:
30
+ * - default (no `shouldAnimateLayout`): the items are not projection nodes, so
31
+ * the external change does not re-measure them (reads === 0).
32
+ * - `shouldAnimateLayout`: the items join the shared projection tree, so they are
33
+ * re-measured by the unrelated external change (reads > 0).
34
+ */
35
+
36
+ const ITEM_COUNT = 20;
37
+ let boundingRectCalls;
38
+ let originalGetBoundingClientRect;
39
+ const isInsideList = element => Boolean(element.closest('.beta-chayns-list-item'));
40
+ (0, _vitest.beforeEach)(() => {
41
+ boundingRectCalls = 0;
42
+ originalGetBoundingClientRect = Element.prototype.getBoundingClientRect;
43
+ Element.prototype.getBoundingClientRect = function getBoundingClientRect() {
44
+ if (isInsideList(this)) {
45
+ boundingRectCalls += 1;
46
+ }
47
+ return originalGetBoundingClientRect.apply(this);
48
+ };
49
+ });
50
+ (0, _vitest.afterEach)(() => {
51
+ Element.prototype.getBoundingClientRect = originalGetBoundingClientRect;
52
+ });
53
+ const theme = {
54
+ '100-rgb': '255, 255, 255',
55
+ '102-rgb': '255, 255, 255',
56
+ 'headline-rgb': '0, 0, 0',
57
+ cardBackgroundOpacity: 1,
58
+ accordionLines: true,
59
+ accordionIcon: 'fa-chevron-right',
60
+ iconStyle: 'fa-regular'
61
+ };
62
+ const Harness = ({
63
+ shouldAnimateLayout,
64
+ isExternalExpanded
65
+ }) => /*#__PURE__*/_react3.default.createElement(_styledComponents.ThemeProvider, {
66
+ theme: theme
67
+ }, /*#__PURE__*/_react3.default.createElement(_react2.motion.div, {
68
+ layout: true,
69
+ "data-testid": "outside",
70
+ style: {
71
+ height: isExternalExpanded ? 500 : 100
72
+ }
73
+ }), /*#__PURE__*/_react3.default.createElement(_List.default, null, Array.from({
74
+ length: ITEM_COUNT
75
+ }, (_, index) => /*#__PURE__*/_react3.default.createElement(_ListItem.default, {
76
+ key: index,
77
+ title: `Item ${index}`,
78
+ shouldAnimateLayout: shouldAnimateLayout
79
+ }))));
80
+ const flushFrames = async () => {
81
+ await (0, _react.act)(async () => {
82
+ await new Promise(resolve => {
83
+ requestAnimationFrame(() => requestAnimationFrame(() => resolve(undefined)));
84
+ });
85
+ });
86
+ };
87
+
88
+ /**
89
+ * Render the list, then trigger a layout change on the external projection node
90
+ * and return the number of `getBoundingClientRect` calls that hit the list items.
91
+ */
92
+ const measureExternalLayoutChange = async shouldAnimateLayout => {
93
+ const {
94
+ rerender
95
+ } = (0, _react.render)(/*#__PURE__*/_react3.default.createElement(Harness, {
96
+ shouldAnimateLayout: shouldAnimateLayout,
97
+ isExternalExpanded: false
98
+ }));
99
+ await flushFrames();
100
+ boundingRectCalls = 0;
101
+ rerender(/*#__PURE__*/_react3.default.createElement(Harness, {
102
+ shouldAnimateLayout: shouldAnimateLayout,
103
+ isExternalExpanded: true
104
+ }));
105
+ await flushFrames();
106
+ return boundingRectCalls;
107
+ };
108
+ (0, _vitest.describe)('ListItem layout projection', () => {
109
+ (0, _vitest.it)('does not re-measure items on external layout changes by default', async () => {
110
+ const reads = await measureExternalLayoutChange(false);
111
+ (0, _vitest.expect)(reads).toBe(0);
112
+ });
113
+ (0, _vitest.it)('re-measures items on external layout changes when shouldAnimateLayout is set', async () => {
114
+ const reads = await measureExternalLayoutChange(true);
115
+ (0, _vitest.expect)(reads).toBeGreaterThan(0);
116
+ });
117
+ (0, _vitest.it)('keeps the enter/exit animation for added/removed items without layout projection', async () => {
118
+ const renderItems = titles => /*#__PURE__*/_react3.default.createElement(_styledComponents.ThemeProvider, {
119
+ theme: theme
120
+ }, /*#__PURE__*/_react3.default.createElement(_List.default, null, titles.map(title => /*#__PURE__*/_react3.default.createElement(_ListItem.default, {
121
+ key: title,
122
+ title: title
123
+ }))));
124
+ const {
125
+ rerender,
126
+ queryByText
127
+ } = (0, _react.render)(renderItems(['A', 'B', 'C']));
128
+ await flushFrames();
129
+
130
+ // Remove the first item. AnimatePresence must keep it mounted while its
131
+ // exit (height/opacity) animation runs -- this is independent of the
132
+ // (disabled) layout projection.
133
+ rerender(renderItems(['B', 'C']));
134
+ (0, _vitest.expect)(queryByText('A')).not.toBeNull();
135
+ });
136
+ });
137
+ //# sourceMappingURL=ListItem.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ListItem.test.js","names":["_react","require","_react2","_react3","_interopRequireDefault","_styledComponents","_vitest","_List","_ListItem","e","__esModule","default","vi","mock","useTranslation","t","textString","fallback","ITEM_COUNT","boundingRectCalls","originalGetBoundingClientRect","isInsideList","element","Boolean","closest","beforeEach","Element","prototype","getBoundingClientRect","apply","afterEach","theme","cardBackgroundOpacity","accordionLines","accordionIcon","iconStyle","Harness","shouldAnimateLayout","isExternalExpanded","createElement","ThemeProvider","motion","div","layout","style","height","Array","from","length","_","index","key","title","flushFrames","act","Promise","resolve","requestAnimationFrame","undefined","measureExternalLayoutChange","rerender","render","describe","it","reads","expect","toBe","toBeGreaterThan","renderItems","titles","map","queryByText","not","toBeNull"],"sources":["../../../../../src/components/list/list-item/ListItem.test.tsx"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-unsafe-call */\nimport { act, render } from '@testing-library/react';\nimport { motion } from 'motion/react';\nimport React from 'react';\nimport { ThemeProvider } from 'styled-components';\nimport { afterEach, beforeEach, describe, expect, it, vi } from 'vitest';\nimport type { Theme } from '../../color-scheme-provider/ColorSchemeProvider';\nimport List from '../List';\nimport ListItem from './ListItem';\n\nvi.mock('@chayns/textstrings', () => ({\n useTranslation: () => ({\n t: (textString: { fallback?: string } | string) =>\n typeof textString === 'string' ? textString : textString.fallback,\n }),\n}));\n\n/**\n * Regression guard for the framer-motion layout-projection thrash.\n *\n * framer-motions layout projection (`layout` / `layout=\"position\"`) is\n * viewport-global: all layout-projection nodes share a single projection tree, so\n * a layout change on *any* node forces a re-measurement of *all* nodes via\n * `getBoundingClientRect`. With many `ListItem`s this scales linearly with N.\n *\n * The tests below render a projection node (`motion.div layout`) *outside* the\n * list and change its layout. They then count how many `getBoundingClientRect`\n * calls hit the rendered `ListItem` elements:\n * - default (no `shouldAnimateLayout`): the items are not projection nodes, so\n * the external change does not re-measure them (reads === 0).\n * - `shouldAnimateLayout`: the items join the shared projection tree, so they are\n * re-measured by the unrelated external change (reads > 0).\n */\n\nconst ITEM_COUNT = 20;\n\nlet boundingRectCalls: number;\nlet originalGetBoundingClientRect: typeof Element.prototype.getBoundingClientRect;\n\nconst isInsideList = (element: Element) => Boolean(element.closest('.beta-chayns-list-item'));\n\nbeforeEach(() => {\n boundingRectCalls = 0;\n originalGetBoundingClientRect = Element.prototype.getBoundingClientRect;\n\n Element.prototype.getBoundingClientRect = function getBoundingClientRect(\n this: Element,\n ): DOMRect {\n if (isInsideList(this)) {\n boundingRectCalls += 1;\n }\n\n return originalGetBoundingClientRect.apply(this) as DOMRect;\n };\n});\n\nafterEach(() => {\n Element.prototype.getBoundingClientRect = originalGetBoundingClientRect;\n});\n\nconst theme = {\n '100-rgb': '255, 255, 255',\n '102-rgb': '255, 255, 255',\n 'headline-rgb': '0, 0, 0',\n cardBackgroundOpacity: 1,\n accordionLines: true,\n accordionIcon: 'fa-chevron-right',\n iconStyle: 'fa-regular',\n} as unknown as Theme;\n\ntype HarnessProps = {\n shouldAnimateLayout: boolean;\n isExternalExpanded: boolean;\n};\n\nconst Harness = ({ shouldAnimateLayout, isExternalExpanded }: HarnessProps) => (\n <ThemeProvider theme={theme}>\n {/* A layout-projection node completely outside of the list. */}\n <motion.div\n layout\n data-testid=\"outside\"\n style={{ height: isExternalExpanded ? 500 : 100 }}\n />\n <List>\n {Array.from({ length: ITEM_COUNT }, (_, index) => (\n <ListItem\n key={index}\n title={`Item ${index}`}\n shouldAnimateLayout={shouldAnimateLayout}\n />\n ))}\n </List>\n </ThemeProvider>\n);\n\nconst flushFrames = async () => {\n await act(async () => {\n await new Promise((resolve) => {\n requestAnimationFrame(() => requestAnimationFrame(() => resolve(undefined)));\n });\n });\n};\n\n/**\n * Render the list, then trigger a layout change on the external projection node\n * and return the number of `getBoundingClientRect` calls that hit the list items.\n */\nconst measureExternalLayoutChange = async (shouldAnimateLayout: boolean) => {\n const { rerender } = render(\n <Harness shouldAnimateLayout={shouldAnimateLayout} isExternalExpanded={false} />,\n );\n\n await flushFrames();\n\n boundingRectCalls = 0;\n\n rerender(<Harness shouldAnimateLayout={shouldAnimateLayout} isExternalExpanded />);\n\n await flushFrames();\n\n return boundingRectCalls;\n};\n\ndescribe('ListItem layout projection', () => {\n it('does not re-measure items on external layout changes by default', async () => {\n const reads = await measureExternalLayoutChange(false);\n\n expect(reads).toBe(0);\n });\n\n it('re-measures items on external layout changes when shouldAnimateLayout is set', async () => {\n const reads = await measureExternalLayoutChange(true);\n\n expect(reads).toBeGreaterThan(0);\n });\n\n it('keeps the enter/exit animation for added/removed items without layout projection', async () => {\n const renderItems = (titles: string[]) => (\n <ThemeProvider theme={theme}>\n <List>\n {titles.map((title) => (\n <ListItem key={title} title={title} />\n ))}\n </List>\n </ThemeProvider>\n );\n\n const { rerender, queryByText } = render(renderItems(['A', 'B', 'C']));\n\n await flushFrames();\n\n // Remove the first item. AnimatePresence must keep it mounted while its\n // exit (height/opacity) animation runs -- this is independent of the\n // (disabled) layout projection.\n rerender(renderItems(['B', 'C']));\n\n expect(queryByText('A')).not.toBeNull();\n });\n});\n"],"mappings":"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","ignoreList":[]}
@@ -45,6 +45,7 @@ const ListItemHead = ({
45
45
  titleElement,
46
46
  setShouldEnableTooltip,
47
47
  shouldDisableAnimation = false,
48
+ shouldAnimateLayout = false,
48
49
  cornerElement,
49
50
  onTitleWidthChange,
50
51
  onImageError,
@@ -165,7 +166,7 @@ const ListItemHead = ({
165
166
  $isOpen: isOpen
166
167
  }, /*#__PURE__*/_react2.default.createElement(_react.LayoutGroup, null, /*#__PURE__*/_react2.default.createElement(_ListItemHead.StyledListItemHeadTitle, {
167
168
  as: shouldDisableAnimation ? undefined : _react.motion.div,
168
- layout: "position"
169
+ layout: shouldAnimateLayout ? 'position' : undefined
169
170
  }, hasTitleInput ?
170
171
  /*#__PURE__*/
171
172
  // eslint-disable-next-line react/jsx-no-constructed-context-values
@@ -1 +1 @@
1
- {"version":3,"file":"ListItemHead.js","names":["_react","require","_react2","_interopRequireWildcard","_ListItemIcon","_interopRequireDefault","_ListItemImage","_ListItemHead","_ListItemTitle","_ListItemSubtitle","_ListItemRightElement","_styledComponents","_Icon","_icon","_Input","_AreaContextProvider","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","ListItemHead","careOfLocationId","cornerImage","hoverItem","icons","imageBackground","images","isAnyItemExpandable","isExpandable","isOpen","isTitleGreyed","leftElements","onClick","onLongPress","rightElements","shouldHideImageOrIconBackground","shouldHideIndicator","shouldOpenImageOnClick","shouldShowRoundImageOrIcon","subtitle","shouldForceHover","title","titleElement","setShouldEnableTooltip","shouldDisableAnimation","cornerElement","onTitleWidthChange","onImageError","onTitleInputChange","titleInputProps","shouldShowHoverItem","setShouldShowHoverItem","useState","titleMaxWidth","setTitleMaxWidth","titleWidth","setTitleWidth","longPressTimeoutRef","useRef","resizeSkipRef","leftElementRef","theme","useTheme","areaProvider","useContext","AreaContext","hasTitleInput","shouldShowSubtitleRow","shouldShowMultilineTitle","useMemo","useEffect","window","setTimeout","current","handleShowTooltipResize","useCallback","entries","_entries$","_entries$2","target","clientWidth","el","scrollWidth","handleMouseEnter","handleMouseLeave","handleTouchStart","event","handleTouchEnd","clearTimeout","handleTitleWidthChange","width","shouldShowHoverItemContent","handleInputClick","stopPropagation","iconOrImageElement","createElement","shouldHideBackground","shouldShowRoundIcon","shouldShowRoundImage","undefined","expandIcon","internalIcon","getIsExpandableIcon","accordionIcon","internalIconStyle","iconStyle","StyledUnicodeIcon","$icon","className","StyledListItemHead","as","motion","div","animate","opacity","initial","transition","duration","type","$isClickable","$isAnyItemExpandable","onMouseEnter","onMouseLeave","onTouchStart","onTouchEnd","StyledListItemHeadLeftWrapper","StyledListItemHeadIndicator","rotate","StyledListItemHeadLeftElements","ref","StyledListItemHeadContent","$isIconOrImageGiven","$isOpen","LayoutGroup","StyledListItemHeadTitle","layout","Provider","value","shouldChangeColor","StyledListItemHeadTitleInputWrapper","onChange","onResize","StyledListItemHeadSubtitle","StyledMotionListItemHeadHoverItemWrapper","marginLeft","StyledMotionListItemHeadHoverItem","displayName","_default","exports"],"sources":["../../../../../../src/components/list/list-item/list-item-head/ListItemHead.tsx"],"sourcesContent":["import { LayoutGroup, motion } from 'motion/react';\nimport React, {\n ChangeEventHandler,\n CSSProperties,\n FC,\n MouseEventHandler,\n ReactNode,\n SyntheticEvent,\n TouchEventHandler,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport type { IListItemRightElements } from '../../../../types/list';\nimport type { InputProps } from '../../../input/Input';\nimport ListItemIcon from './list-item-icon/ListItemIcon';\nimport ListItemImage from './list-item-image/ListItemImage';\nimport {\n StyledListItemHead,\n StyledListItemHeadContent,\n StyledListItemHeadIndicator,\n StyledListItemHeadLeftElements,\n StyledListItemHeadLeftWrapper,\n StyledListItemHeadSubtitle,\n StyledListItemHeadTitle,\n StyledListItemHeadTitleInputWrapper,\n StyledMotionListItemHeadHoverItem,\n StyledMotionListItemHeadHoverItemWrapper,\n} from './ListItemHead.styles';\nimport ListItemTitle from './list-item-title/ListItemTitle';\nimport ListItemSubtitle from './list-item-subtitle/ListItemSubtitle';\nimport ListItemRightElement from './list-item-right-element/ListItemRightElement';\nimport { useTheme } from 'styled-components';\nimport type { Theme } from '../../../color-scheme-provider/ColorSchemeProvider';\nimport { StyledUnicodeIcon } from '../../../icon/Icon.styles';\nimport { getIsExpandableIcon } from '../../../../utils/icon';\nimport Input from '../../../input/Input';\nimport { AreaContext } from '../../../area-provider/AreaContextProvider';\n\ntype ListItemHeadProps = {\n careOfLocationId?: number;\n cornerImage?: string;\n hoverItem?: ReactNode;\n icons?: string[];\n imageBackground?: CSSProperties['background'];\n images?: string[];\n isAnyItemExpandable: boolean;\n isExpandable: boolean;\n isOpen: boolean;\n isTitleGreyed?: boolean;\n leftElements?: ReactNode;\n onClick?: MouseEventHandler<HTMLDivElement>;\n onLongPress?: TouchEventHandler<HTMLDivElement>;\n rightElements?: IListItemRightElements;\n shouldHideImageOrIconBackground?: boolean;\n shouldHideIndicator?: boolean;\n shouldOpenImageOnClick: boolean;\n shouldShowRoundImageOrIcon?: boolean;\n subtitle?: ReactNode;\n title: ReactNode;\n titleElement?: ReactNode;\n shouldForceHover?: boolean;\n setShouldEnableTooltip: (value: boolean) => void;\n shouldDisableAnimation?: boolean;\n cornerElement?: ReactNode;\n onTitleWidthChange: (titleWidth: number, titleMaxWidth: number) => void;\n onImageError?: (event: SyntheticEvent<HTMLImageElement, Event>, index: number) => void;\n onTitleInputChange?: ChangeEventHandler<HTMLInputElement>;\n titleInputProps?: InputProps;\n};\n\nconst ListItemHead: FC<ListItemHeadProps> = ({\n careOfLocationId,\n cornerImage,\n hoverItem,\n icons,\n imageBackground,\n images,\n isAnyItemExpandable,\n isExpandable,\n isOpen,\n isTitleGreyed,\n leftElements,\n onClick,\n onLongPress,\n rightElements,\n shouldHideImageOrIconBackground,\n shouldHideIndicator,\n shouldOpenImageOnClick,\n shouldShowRoundImageOrIcon,\n subtitle,\n shouldForceHover,\n title,\n titleElement,\n setShouldEnableTooltip,\n shouldDisableAnimation = false,\n cornerElement,\n onTitleWidthChange,\n onImageError,\n onTitleInputChange,\n titleInputProps,\n}) => {\n const [shouldShowHoverItem, setShouldShowHoverItem] = useState(false);\n const [titleMaxWidth, setTitleMaxWidth] = useState(0);\n const [titleWidth, setTitleWidth] = useState(0);\n\n const longPressTimeoutRef = useRef<number>();\n const resizeSkipRef = useRef(true);\n const leftElementRef = useRef<HTMLDivElement>(null);\n\n const theme = useTheme() as Theme;\n const areaProvider = useContext(AreaContext);\n\n const hasTitleInput = typeof onTitleInputChange === 'function';\n\n const shouldShowSubtitleRow =\n (!hasTitleInput && (subtitle || typeof subtitle === 'string')) ||\n (typeof rightElements === 'object' && rightElements && 'bottom' in rightElements);\n\n const shouldShowMultilineTitle = useMemo(\n () => !subtitle && !hasTitleInput,\n [hasTitleInput, subtitle],\n );\n\n useEffect(() => {\n window.setTimeout(() => {\n resizeSkipRef.current = false;\n }, 200);\n }, []);\n\n useEffect(() => {\n onTitleWidthChange(titleWidth, titleMaxWidth);\n }, [onTitleWidthChange, titleMaxWidth, titleWidth]);\n\n const handleShowTooltipResize = useCallback(\n (entries: ResizeObserverEntry[]) => {\n setTitleWidth(entries[0]?.target.clientWidth ?? 0);\n\n if (resizeSkipRef.current) {\n return;\n }\n\n const el = entries[0]?.target;\n if (!el) return;\n setShouldEnableTooltip(el.scrollWidth > el.clientWidth);\n },\n [setShouldEnableTooltip],\n );\n\n const handleMouseEnter = useCallback(() => setShouldShowHoverItem(true), []);\n\n const handleMouseLeave = useCallback(() => setShouldShowHoverItem(false), []);\n\n const handleTouchStart = useCallback<TouchEventHandler<HTMLDivElement>>(\n (event) => {\n longPressTimeoutRef.current = window.setTimeout(() => {\n if (typeof onLongPress === 'function') {\n onLongPress(event);\n }\n }, 400);\n },\n [onLongPress],\n );\n\n const handleTouchEnd = useCallback(() => {\n clearTimeout(longPressTimeoutRef.current);\n }, []);\n\n const handleTitleWidthChange = useCallback((width: number) => {\n setTitleMaxWidth(width);\n }, []);\n const shouldShowHoverItemContent = !!(shouldForceHover || shouldShowHoverItem);\n\n const handleInputClick = useCallback<MouseEventHandler<HTMLDivElement>>((event) => {\n event.stopPropagation();\n }, []);\n\n const iconOrImageElement = useMemo(() => {\n if (icons) {\n return (\n <ListItemIcon\n icons={icons}\n shouldHideBackground={!!shouldHideImageOrIconBackground}\n shouldShowRoundIcon={!!shouldShowRoundImageOrIcon}\n />\n );\n }\n\n if (images) {\n return (\n <ListItemImage\n cornerElement={cornerElement}\n imageBackground={imageBackground}\n careOfLocationId={careOfLocationId}\n cornerImage={cornerImage}\n images={images}\n onImageError={onImageError}\n shouldOpenImageOnClick={shouldOpenImageOnClick}\n shouldHideBackground={!!shouldHideImageOrIconBackground}\n shouldShowRoundImage={!!shouldShowRoundImageOrIcon}\n />\n );\n }\n\n return undefined;\n }, [\n careOfLocationId,\n cornerElement,\n cornerImage,\n icons,\n imageBackground,\n images,\n onImageError,\n shouldHideImageOrIconBackground,\n shouldOpenImageOnClick,\n shouldShowRoundImageOrIcon,\n ]);\n\n const expandIcon = useMemo(() => {\n const internalIcon = getIsExpandableIcon(theme.accordionIcon);\n const internalIconStyle = theme?.iconStyle ? theme.iconStyle : 'fa-regular';\n return <StyledUnicodeIcon $icon={internalIcon} className={internalIconStyle} />;\n }, [theme.accordionIcon, theme.iconStyle]);\n\n return (\n <StyledListItemHead\n as={shouldDisableAnimation ? undefined : motion.div}\n animate={\n shouldDisableAnimation\n ? undefined\n : {\n opacity: isTitleGreyed ? 0.5 : 1,\n }\n }\n initial={shouldDisableAnimation ? undefined : false}\n transition={shouldDisableAnimation ? undefined : { duration: 0.2, type: 'tween' }}\n className=\"beta-chayns-list-item-head\"\n $isClickable={typeof onClick === 'function' || isExpandable}\n $isAnyItemExpandable={isAnyItemExpandable}\n onClick={onClick}\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n onTouchStart={typeof onLongPress === 'function' ? handleTouchStart : undefined}\n onTouchEnd={typeof onLongPress === 'function' ? handleTouchEnd : undefined}\n >\n <StyledListItemHeadLeftWrapper>\n {isAnyItemExpandable && (\n <StyledListItemHeadIndicator\n as={shouldDisableAnimation ? undefined : motion.div}\n animate={shouldDisableAnimation ? undefined : { rotate: isOpen ? 90 : 0 }}\n initial={shouldDisableAnimation ? undefined : false}\n transition={shouldDisableAnimation ? undefined : { type: 'tween' }}\n >\n {isExpandable && !shouldHideIndicator && expandIcon}\n </StyledListItemHeadIndicator>\n )}\n {leftElements && (\n <StyledListItemHeadLeftElements ref={leftElementRef} data-left-element=\"true\">\n {leftElements}\n </StyledListItemHeadLeftElements>\n )}\n {iconOrImageElement}\n </StyledListItemHeadLeftWrapper>\n <StyledListItemHeadContent\n $isIconOrImageGiven={iconOrImageElement !== undefined}\n $isOpen={isOpen}\n >\n <LayoutGroup>\n <StyledListItemHeadTitle\n as={shouldDisableAnimation ? undefined : motion.div}\n layout=\"position\"\n >\n {hasTitleInput ? (\n // eslint-disable-next-line react/jsx-no-constructed-context-values\n <AreaContext.Provider\n value={{ ...areaProvider, shouldChangeColor: true }}\n >\n <StyledListItemHeadTitleInputWrapper onClick={handleInputClick}>\n <Input\n /* eslint-disable-next-line react/jsx-props-no-spreading */\n {...titleInputProps}\n value={typeof title === 'string' ? title : undefined}\n onChange={onTitleInputChange}\n />\n </StyledListItemHeadTitleInputWrapper>\n </AreaContext.Provider>\n ) : (\n <ListItemTitle\n title={title}\n titleElement={titleElement}\n isOpen={isOpen}\n shouldShowMultilineTitle={shouldShowMultilineTitle}\n rightElements={rightElements}\n onTitleWidthChange={handleTitleWidthChange}\n onResize={handleShowTooltipResize}\n />\n )}\n </StyledListItemHeadTitle>\n {shouldShowSubtitleRow && (\n <StyledListItemHeadSubtitle>\n <ListItemSubtitle\n subtitle={subtitle}\n isOpen={isOpen}\n rightElements={rightElements}\n />\n </StyledListItemHeadSubtitle>\n )}\n </LayoutGroup>\n </StyledListItemHeadContent>\n <ListItemRightElement rightElements={rightElements} />\n {hoverItem && shouldShowHoverItemContent && (\n <StyledMotionListItemHeadHoverItemWrapper\n className=\"beta-chayns-list-item-hover-item\"\n animate={{\n marginLeft: 8,\n opacity: 1,\n width: 'auto',\n }}\n initial={false}\n transition={{ duration: 0.15, type: 'tween' }}\n >\n <StyledMotionListItemHeadHoverItem>\n {hoverItem}\n </StyledMotionListItemHeadHoverItem>\n </StyledMotionListItemHeadHoverItemWrapper>\n )}\n </StyledListItemHead>\n );\n};\n\nListItemHead.displayName = 'ListItemHead';\n\nexport default ListItemHead;\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"ListItemHead.js","names":["_react","require","_react2","_interopRequireWildcard","_ListItemIcon","_interopRequireDefault","_ListItemImage","_ListItemHead","_ListItemTitle","_ListItemSubtitle","_ListItemRightElement","_styledComponents","_Icon","_icon","_Input","_AreaContextProvider","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","ListItemHead","careOfLocationId","cornerImage","hoverItem","icons","imageBackground","images","isAnyItemExpandable","isExpandable","isOpen","isTitleGreyed","leftElements","onClick","onLongPress","rightElements","shouldHideImageOrIconBackground","shouldHideIndicator","shouldOpenImageOnClick","shouldShowRoundImageOrIcon","subtitle","shouldForceHover","title","titleElement","setShouldEnableTooltip","shouldDisableAnimation","shouldAnimateLayout","cornerElement","onTitleWidthChange","onImageError","onTitleInputChange","titleInputProps","shouldShowHoverItem","setShouldShowHoverItem","useState","titleMaxWidth","setTitleMaxWidth","titleWidth","setTitleWidth","longPressTimeoutRef","useRef","resizeSkipRef","leftElementRef","theme","useTheme","areaProvider","useContext","AreaContext","hasTitleInput","shouldShowSubtitleRow","shouldShowMultilineTitle","useMemo","useEffect","window","setTimeout","current","handleShowTooltipResize","useCallback","entries","_entries$","_entries$2","target","clientWidth","el","scrollWidth","handleMouseEnter","handleMouseLeave","handleTouchStart","event","handleTouchEnd","clearTimeout","handleTitleWidthChange","width","shouldShowHoverItemContent","handleInputClick","stopPropagation","iconOrImageElement","createElement","shouldHideBackground","shouldShowRoundIcon","shouldShowRoundImage","undefined","expandIcon","internalIcon","getIsExpandableIcon","accordionIcon","internalIconStyle","iconStyle","StyledUnicodeIcon","$icon","className","StyledListItemHead","as","motion","div","animate","opacity","initial","transition","duration","type","$isClickable","$isAnyItemExpandable","onMouseEnter","onMouseLeave","onTouchStart","onTouchEnd","StyledListItemHeadLeftWrapper","StyledListItemHeadIndicator","rotate","StyledListItemHeadLeftElements","ref","StyledListItemHeadContent","$isIconOrImageGiven","$isOpen","LayoutGroup","StyledListItemHeadTitle","layout","Provider","value","shouldChangeColor","StyledListItemHeadTitleInputWrapper","onChange","onResize","StyledListItemHeadSubtitle","StyledMotionListItemHeadHoverItemWrapper","marginLeft","StyledMotionListItemHeadHoverItem","displayName","_default","exports"],"sources":["../../../../../../src/components/list/list-item/list-item-head/ListItemHead.tsx"],"sourcesContent":["import { LayoutGroup, motion } from 'motion/react';\nimport React, {\n ChangeEventHandler,\n CSSProperties,\n FC,\n MouseEventHandler,\n ReactNode,\n SyntheticEvent,\n TouchEventHandler,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport type { IListItemRightElements } from '../../../../types/list';\nimport type { InputProps } from '../../../input/Input';\nimport ListItemIcon from './list-item-icon/ListItemIcon';\nimport ListItemImage from './list-item-image/ListItemImage';\nimport {\n StyledListItemHead,\n StyledListItemHeadContent,\n StyledListItemHeadIndicator,\n StyledListItemHeadLeftElements,\n StyledListItemHeadLeftWrapper,\n StyledListItemHeadSubtitle,\n StyledListItemHeadTitle,\n StyledListItemHeadTitleInputWrapper,\n StyledMotionListItemHeadHoverItem,\n StyledMotionListItemHeadHoverItemWrapper,\n} from './ListItemHead.styles';\nimport ListItemTitle from './list-item-title/ListItemTitle';\nimport ListItemSubtitle from './list-item-subtitle/ListItemSubtitle';\nimport ListItemRightElement from './list-item-right-element/ListItemRightElement';\nimport { useTheme } from 'styled-components';\nimport type { Theme } from '../../../color-scheme-provider/ColorSchemeProvider';\nimport { StyledUnicodeIcon } from '../../../icon/Icon.styles';\nimport { getIsExpandableIcon } from '../../../../utils/icon';\nimport Input from '../../../input/Input';\nimport { AreaContext } from '../../../area-provider/AreaContextProvider';\n\ntype ListItemHeadProps = {\n careOfLocationId?: number;\n cornerImage?: string;\n hoverItem?: ReactNode;\n icons?: string[];\n imageBackground?: CSSProperties['background'];\n images?: string[];\n isAnyItemExpandable: boolean;\n isExpandable: boolean;\n isOpen: boolean;\n isTitleGreyed?: boolean;\n leftElements?: ReactNode;\n onClick?: MouseEventHandler<HTMLDivElement>;\n onLongPress?: TouchEventHandler<HTMLDivElement>;\n rightElements?: IListItemRightElements;\n shouldHideImageOrIconBackground?: boolean;\n shouldHideIndicator?: boolean;\n shouldOpenImageOnClick: boolean;\n shouldShowRoundImageOrIcon?: boolean;\n subtitle?: ReactNode;\n title: ReactNode;\n titleElement?: ReactNode;\n shouldForceHover?: boolean;\n setShouldEnableTooltip: (value: boolean) => void;\n shouldDisableAnimation?: boolean;\n shouldAnimateLayout?: boolean;\n cornerElement?: ReactNode;\n onTitleWidthChange: (titleWidth: number, titleMaxWidth: number) => void;\n onImageError?: (event: SyntheticEvent<HTMLImageElement, Event>, index: number) => void;\n onTitleInputChange?: ChangeEventHandler<HTMLInputElement>;\n titleInputProps?: InputProps;\n};\n\nconst ListItemHead: FC<ListItemHeadProps> = ({\n careOfLocationId,\n cornerImage,\n hoverItem,\n icons,\n imageBackground,\n images,\n isAnyItemExpandable,\n isExpandable,\n isOpen,\n isTitleGreyed,\n leftElements,\n onClick,\n onLongPress,\n rightElements,\n shouldHideImageOrIconBackground,\n shouldHideIndicator,\n shouldOpenImageOnClick,\n shouldShowRoundImageOrIcon,\n subtitle,\n shouldForceHover,\n title,\n titleElement,\n setShouldEnableTooltip,\n shouldDisableAnimation = false,\n shouldAnimateLayout = false,\n cornerElement,\n onTitleWidthChange,\n onImageError,\n onTitleInputChange,\n titleInputProps,\n}) => {\n const [shouldShowHoverItem, setShouldShowHoverItem] = useState(false);\n const [titleMaxWidth, setTitleMaxWidth] = useState(0);\n const [titleWidth, setTitleWidth] = useState(0);\n\n const longPressTimeoutRef = useRef<number>();\n const resizeSkipRef = useRef(true);\n const leftElementRef = useRef<HTMLDivElement>(null);\n\n const theme = useTheme() as Theme;\n const areaProvider = useContext(AreaContext);\n\n const hasTitleInput = typeof onTitleInputChange === 'function';\n\n const shouldShowSubtitleRow =\n (!hasTitleInput && (subtitle || typeof subtitle === 'string')) ||\n (typeof rightElements === 'object' && rightElements && 'bottom' in rightElements);\n\n const shouldShowMultilineTitle = useMemo(\n () => !subtitle && !hasTitleInput,\n [hasTitleInput, subtitle],\n );\n\n useEffect(() => {\n window.setTimeout(() => {\n resizeSkipRef.current = false;\n }, 200);\n }, []);\n\n useEffect(() => {\n onTitleWidthChange(titleWidth, titleMaxWidth);\n }, [onTitleWidthChange, titleMaxWidth, titleWidth]);\n\n const handleShowTooltipResize = useCallback(\n (entries: ResizeObserverEntry[]) => {\n setTitleWidth(entries[0]?.target.clientWidth ?? 0);\n\n if (resizeSkipRef.current) {\n return;\n }\n\n const el = entries[0]?.target;\n if (!el) return;\n setShouldEnableTooltip(el.scrollWidth > el.clientWidth);\n },\n [setShouldEnableTooltip],\n );\n\n const handleMouseEnter = useCallback(() => setShouldShowHoverItem(true), []);\n\n const handleMouseLeave = useCallback(() => setShouldShowHoverItem(false), []);\n\n const handleTouchStart = useCallback<TouchEventHandler<HTMLDivElement>>(\n (event) => {\n longPressTimeoutRef.current = window.setTimeout(() => {\n if (typeof onLongPress === 'function') {\n onLongPress(event);\n }\n }, 400);\n },\n [onLongPress],\n );\n\n const handleTouchEnd = useCallback(() => {\n clearTimeout(longPressTimeoutRef.current);\n }, []);\n\n const handleTitleWidthChange = useCallback((width: number) => {\n setTitleMaxWidth(width);\n }, []);\n const shouldShowHoverItemContent = !!(shouldForceHover || shouldShowHoverItem);\n\n const handleInputClick = useCallback<MouseEventHandler<HTMLDivElement>>((event) => {\n event.stopPropagation();\n }, []);\n\n const iconOrImageElement = useMemo(() => {\n if (icons) {\n return (\n <ListItemIcon\n icons={icons}\n shouldHideBackground={!!shouldHideImageOrIconBackground}\n shouldShowRoundIcon={!!shouldShowRoundImageOrIcon}\n />\n );\n }\n\n if (images) {\n return (\n <ListItemImage\n cornerElement={cornerElement}\n imageBackground={imageBackground}\n careOfLocationId={careOfLocationId}\n cornerImage={cornerImage}\n images={images}\n onImageError={onImageError}\n shouldOpenImageOnClick={shouldOpenImageOnClick}\n shouldHideBackground={!!shouldHideImageOrIconBackground}\n shouldShowRoundImage={!!shouldShowRoundImageOrIcon}\n />\n );\n }\n\n return undefined;\n }, [\n careOfLocationId,\n cornerElement,\n cornerImage,\n icons,\n imageBackground,\n images,\n onImageError,\n shouldHideImageOrIconBackground,\n shouldOpenImageOnClick,\n shouldShowRoundImageOrIcon,\n ]);\n\n const expandIcon = useMemo(() => {\n const internalIcon = getIsExpandableIcon(theme.accordionIcon);\n const internalIconStyle = theme?.iconStyle ? theme.iconStyle : 'fa-regular';\n return <StyledUnicodeIcon $icon={internalIcon} className={internalIconStyle} />;\n }, [theme.accordionIcon, theme.iconStyle]);\n\n return (\n <StyledListItemHead\n as={shouldDisableAnimation ? undefined : motion.div}\n animate={\n shouldDisableAnimation\n ? undefined\n : {\n opacity: isTitleGreyed ? 0.5 : 1,\n }\n }\n initial={shouldDisableAnimation ? undefined : false}\n transition={shouldDisableAnimation ? undefined : { duration: 0.2, type: 'tween' }}\n className=\"beta-chayns-list-item-head\"\n $isClickable={typeof onClick === 'function' || isExpandable}\n $isAnyItemExpandable={isAnyItemExpandable}\n onClick={onClick}\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n onTouchStart={typeof onLongPress === 'function' ? handleTouchStart : undefined}\n onTouchEnd={typeof onLongPress === 'function' ? handleTouchEnd : undefined}\n >\n <StyledListItemHeadLeftWrapper>\n {isAnyItemExpandable && (\n <StyledListItemHeadIndicator\n as={shouldDisableAnimation ? undefined : motion.div}\n animate={shouldDisableAnimation ? undefined : { rotate: isOpen ? 90 : 0 }}\n initial={shouldDisableAnimation ? undefined : false}\n transition={shouldDisableAnimation ? undefined : { type: 'tween' }}\n >\n {isExpandable && !shouldHideIndicator && expandIcon}\n </StyledListItemHeadIndicator>\n )}\n {leftElements && (\n <StyledListItemHeadLeftElements ref={leftElementRef} data-left-element=\"true\">\n {leftElements}\n </StyledListItemHeadLeftElements>\n )}\n {iconOrImageElement}\n </StyledListItemHeadLeftWrapper>\n <StyledListItemHeadContent\n $isIconOrImageGiven={iconOrImageElement !== undefined}\n $isOpen={isOpen}\n >\n <LayoutGroup>\n <StyledListItemHeadTitle\n as={shouldDisableAnimation ? undefined : motion.div}\n layout={shouldAnimateLayout ? 'position' : undefined}\n >\n {hasTitleInput ? (\n // eslint-disable-next-line react/jsx-no-constructed-context-values\n <AreaContext.Provider\n value={{ ...areaProvider, shouldChangeColor: true }}\n >\n <StyledListItemHeadTitleInputWrapper onClick={handleInputClick}>\n <Input\n /* eslint-disable-next-line react/jsx-props-no-spreading */\n {...titleInputProps}\n value={typeof title === 'string' ? title : undefined}\n onChange={onTitleInputChange}\n />\n </StyledListItemHeadTitleInputWrapper>\n </AreaContext.Provider>\n ) : (\n <ListItemTitle\n title={title}\n titleElement={titleElement}\n isOpen={isOpen}\n shouldShowMultilineTitle={shouldShowMultilineTitle}\n rightElements={rightElements}\n onTitleWidthChange={handleTitleWidthChange}\n onResize={handleShowTooltipResize}\n />\n )}\n </StyledListItemHeadTitle>\n {shouldShowSubtitleRow && (\n <StyledListItemHeadSubtitle>\n <ListItemSubtitle\n subtitle={subtitle}\n isOpen={isOpen}\n rightElements={rightElements}\n />\n </StyledListItemHeadSubtitle>\n )}\n </LayoutGroup>\n </StyledListItemHeadContent>\n <ListItemRightElement rightElements={rightElements} />\n {hoverItem && shouldShowHoverItemContent && (\n <StyledMotionListItemHeadHoverItemWrapper\n className=\"beta-chayns-list-item-hover-item\"\n animate={{\n marginLeft: 8,\n opacity: 1,\n width: 'auto',\n }}\n initial={false}\n transition={{ duration: 0.15, type: 'tween' }}\n >\n <StyledMotionListItemHeadHoverItem>\n {hoverItem}\n </StyledMotionListItemHeadHoverItem>\n </StyledMotionListItemHeadHoverItemWrapper>\n )}\n </StyledListItemHead>\n );\n};\n\nListItemHead.displayName = 'ListItemHead';\n\nexport default ListItemHead;\n"],"mappings":"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","ignoreList":[]}