@chayns-components/core 5.5.62 → 5.5.64

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/AGENTS.md CHANGED
@@ -2037,6 +2037,30 @@ import { FileList } from '@chayns-components/core';
2037
2037
  />
2038
2038
  ```
2039
2039
 
2040
+ #### Custom Context Menu Items
2041
+
2042
+ ```tsx
2043
+ <FileList
2044
+ files={[
2045
+ {
2046
+ id: '1',
2047
+ name: 'Document.txt',
2048
+ size: 1024,
2049
+ mimeType: 'text/plain',
2050
+ contextMenuItems: [
2051
+ {
2052
+ key: 'custom-download',
2053
+ text: 'Download via project',
2054
+ icons: ['fa fa-download'],
2055
+ onClick: () => action('custom-download')('1'),
2056
+ },
2057
+ ],
2058
+ },
2059
+ ]}
2060
+ shouldAllowDownload={false}
2061
+ />
2062
+ ```
2063
+
2040
2064
  ### Props
2041
2065
 
2042
2066
  | name | type | required | description |
@@ -21,7 +21,8 @@ const FileList = ({
21
21
  size,
22
22
  name,
23
23
  id,
24
- source
24
+ source,
25
+ contextMenuItems
25
26
  }) => /*#__PURE__*/_react.default.createElement(_FileItem.default, {
26
27
  key: id,
27
28
  id: id,
@@ -29,6 +30,7 @@ const FileList = ({
29
30
  size: size,
30
31
  mimeType: mimeType,
31
32
  source: source,
33
+ contextMenuItems: contextMenuItems,
32
34
  onRemove: onRemove,
33
35
  shouldAllowDownload: shouldAllowDownload
34
36
  })), [files, onRemove, shouldAllowDownload]);
@@ -1 +1 @@
1
- {"version":3,"file":"FileList.js","names":["_react","_interopRequireWildcard","require","_textstrings","_List","_interopRequireDefault","_FileList","_FileItem","e","__esModule","default","t","WeakMap","r","n","o","i","f","__proto__","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","FileList","files","onRemove","shouldAllowDownload","content","useMemo","map","mimeType","size","name","id","source","createElement","key","TextStringProviderSSR","libraries","StyledFileList","displayName","_default","exports"],"sources":["../../../../src/components/file-list/FileList.tsx"],"sourcesContent":["import React, { FC, useMemo } from 'react';\nimport { TextStringProviderSSR } from '@chayns/textstrings';\nimport List from '../list/List';\nimport { StyledFileList } from './FileList.styles';\nimport FileItem from './file-item/FileItem';\n\nexport interface IFileItem {\n id: string;\n name: string;\n size?: number;\n mimeType: string;\n source?: string | File;\n}\n\nexport type FileListProps = {\n /**\n * Already uploaded files to display.\n */\n files?: IFileItem[];\n /**\n * A function to be executed when a file is removed.\n */\n onRemove?: (id: IFileItem['id']) => void;\n /**\n * Whether to show a download icon for files that have a `source` set.\n */\n shouldAllowDownload?: boolean;\n};\n\nconst FileList: FC<FileListProps> = ({ files, onRemove, shouldAllowDownload }) => {\n const content = useMemo(\n () =>\n files?.map(({ mimeType, size, name, id, source }) => (\n <FileItem\n key={id}\n id={id}\n name={name}\n size={size}\n mimeType={mimeType}\n source={source}\n onRemove={onRemove}\n shouldAllowDownload={shouldAllowDownload}\n />\n )),\n [files, onRemove, shouldAllowDownload],\n );\n\n return useMemo(\n () => (\n <TextStringProviderSSR libraries=\"chayns-components-v5-core\" id=\"file-list\">\n <StyledFileList>\n <List>{content}</List>\n </StyledFileList>\n </TextStringProviderSSR>\n ),\n [content],\n );\n};\n\nFileList.displayName = 'FileList';\n\nexport default FileList;\n"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,uBAAA,CAAAC,OAAA;AACA,IAAAC,YAAA,GAAAD,OAAA;AACA,IAAAE,KAAA,GAAAC,sBAAA,CAAAH,OAAA;AACA,IAAAI,SAAA,GAAAJ,OAAA;AACA,IAAAK,SAAA,GAAAF,sBAAA,CAAAH,OAAA;AAA4C,SAAAG,uBAAAG,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAAA,SAAAP,wBAAAO,CAAA,EAAAG,CAAA,6BAAAC,OAAA,MAAAC,CAAA,OAAAD,OAAA,IAAAE,CAAA,OAAAF,OAAA,YAAAX,uBAAA,YAAAA,CAAAO,CAAA,EAAAG,CAAA,SAAAA,CAAA,IAAAH,CAAA,IAAAA,CAAA,CAAAC,UAAA,SAAAD,CAAA,MAAAO,CAAA,EAAAC,CAAA,EAAAC,CAAA,KAAAC,SAAA,QAAAR,OAAA,EAAAF,CAAA,iBAAAA,CAAA,uBAAAA,CAAA,yBAAAA,CAAA,SAAAS,CAAA,MAAAF,CAAA,GAAAJ,CAAA,GAAAG,CAAA,GAAAD,CAAA,QAAAE,CAAA,CAAAI,GAAA,CAAAX,CAAA,UAAAO,CAAA,CAAAK,GAAA,CAAAZ,CAAA,GAAAO,CAAA,CAAAM,GAAA,CAAAb,CAAA,EAAAS,CAAA,gBAAAN,CAAA,IAAAH,CAAA,gBAAAG,CAAA,OAAAW,cAAA,CAAAC,IAAA,CAAAf,CAAA,EAAAG,CAAA,OAAAK,CAAA,IAAAD,CAAA,GAAAS,MAAA,CAAAC,cAAA,KAAAD,MAAA,CAAAE,wBAAA,CAAAlB,CAAA,EAAAG,CAAA,OAAAK,CAAA,CAAAI,GAAA,IAAAJ,CAAA,CAAAK,GAAA,IAAAN,CAAA,CAAAE,CAAA,EAAAN,CAAA,EAAAK,CAAA,IAAAC,CAAA,CAAAN,CAAA,IAAAH,CAAA,CAAAG,CAAA,WAAAM,CAAA,KAAAT,CAAA,EAAAG,CAAA;AAyB5C,MAAMgB,QAA2B,GAAGA,CAAC;EAAEC,KAAK;EAAEC,QAAQ;EAAEC;AAAoB,CAAC,KAAK;EAC9E,MAAMC,OAAO,GAAG,IAAAC,cAAO,EACnB,MACIJ,KAAK,aAALA,KAAK,uBAALA,KAAK,CAAEK,GAAG,CAAC,CAAC;IAAEC,QAAQ;IAAEC,IAAI;IAAEC,IAAI;IAAEC,EAAE;IAAEC;EAAO,CAAC,kBAC5CtC,MAAA,CAAAU,OAAA,CAAA6B,aAAA,CAAChC,SAAA,CAAAG,OAAQ;IACL8B,GAAG,EAAEH,EAAG;IACRA,EAAE,EAAEA,EAAG;IACPD,IAAI,EAAEA,IAAK;IACXD,IAAI,EAAEA,IAAK;IACXD,QAAQ,EAAEA,QAAS;IACnBI,MAAM,EAAEA,MAAO;IACfT,QAAQ,EAAEA,QAAS;IACnBC,mBAAmB,EAAEA;EAAoB,CAC5C,CACJ,CAAC,EACN,CAACF,KAAK,EAAEC,QAAQ,EAAEC,mBAAmB,CACzC,CAAC;EAED,OAAO,IAAAE,cAAO,EACV,mBACIhC,MAAA,CAAAU,OAAA,CAAA6B,aAAA,CAACpC,YAAA,CAAAsC,qBAAqB;IAACC,SAAS,EAAC,2BAA2B;IAACL,EAAE,EAAC;EAAW,gBACvErC,MAAA,CAAAU,OAAA,CAAA6B,aAAA,CAACjC,SAAA,CAAAqC,cAAc,qBACX3C,MAAA,CAAAU,OAAA,CAAA6B,aAAA,CAACnC,KAAA,CAAAM,OAAI,QAAEqB,OAAc,CACT,CACG,CAC1B,EACD,CAACA,OAAO,CACZ,CAAC;AACL,CAAC;AAEDJ,QAAQ,CAACiB,WAAW,GAAG,UAAU;AAAC,IAAAC,QAAA,GAAAC,OAAA,CAAApC,OAAA,GAEnBiB,QAAQ","ignoreList":[]}
1
+ {"version":3,"file":"FileList.js","names":["_react","_interopRequireWildcard","require","_textstrings","_List","_interopRequireDefault","_FileList","_FileItem","e","__esModule","default","t","WeakMap","r","n","o","i","f","__proto__","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","FileList","files","onRemove","shouldAllowDownload","content","useMemo","map","mimeType","size","name","id","source","contextMenuItems","createElement","key","TextStringProviderSSR","libraries","StyledFileList","displayName","_default","exports"],"sources":["../../../../src/components/file-list/FileList.tsx"],"sourcesContent":["import React, { FC, useMemo } from 'react';\nimport { TextStringProviderSSR } from '@chayns/textstrings';\nimport List from '../list/List';\nimport { StyledFileList } from './FileList.styles';\nimport FileItem from './file-item/FileItem';\nimport type { ContextMenuItem } from '../context-menu/ContextMenu.types';\n\nexport interface IFileItem {\n id: string;\n name: string;\n size?: number;\n mimeType: string;\n source?: string | File;\n /**\n * Additional context menu actions, appended after the built-in download and remove actions.\n * Use keys other than `download` and `remove` when those built-in actions are enabled.\n */\n contextMenuItems?: ContextMenuItem[];\n}\n\nexport type FileListProps = {\n /**\n * Already uploaded files to display.\n */\n files?: IFileItem[];\n /**\n * A function to be executed when a file is removed.\n */\n onRemove?: (id: IFileItem['id']) => void;\n /**\n * Whether to show a download icon for files that have a `source` set.\n */\n shouldAllowDownload?: boolean;\n};\n\nconst FileList: FC<FileListProps> = ({ files, onRemove, shouldAllowDownload }) => {\n const content = useMemo(\n () =>\n files?.map(({ mimeType, size, name, id, source, contextMenuItems }) => (\n <FileItem\n key={id}\n id={id}\n name={name}\n size={size}\n mimeType={mimeType}\n source={source}\n contextMenuItems={contextMenuItems}\n onRemove={onRemove}\n shouldAllowDownload={shouldAllowDownload}\n />\n )),\n [files, onRemove, shouldAllowDownload],\n );\n\n return useMemo(\n () => (\n <TextStringProviderSSR libraries=\"chayns-components-v5-core\" id=\"file-list\">\n <StyledFileList>\n <List>{content}</List>\n </StyledFileList>\n </TextStringProviderSSR>\n ),\n [content],\n );\n};\n\nFileList.displayName = 'FileList';\n\nexport default FileList;\n"],"mappings":"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","ignoreList":[]}
@@ -23,12 +23,14 @@ const FileItem = ({
23
23
  name,
24
24
  id,
25
25
  source,
26
- shouldAllowDownload
26
+ shouldAllowDownload,
27
+ contextMenuItems
27
28
  }) => {
28
29
  const canDownload = shouldAllowDownload && !!source;
29
30
  const canRemove = typeof onRemove === 'function';
31
+ const hasCustomActions = !!(contextMenuItems !== null && contextMenuItems !== void 0 && contextMenuItems.length);
30
32
  const actionIconRef = (0, _react.useRef)(null);
31
- const shouldShowKeyboardHighlighting = (0, _useKeyboardFocusHighlighting.useKeyboardFocusHighlighting)(canRemove || !!canDownload);
33
+ const shouldShowKeyboardHighlighting = (0, _useKeyboardFocusHighlighting.useKeyboardFocusHighlighting)(canRemove || !!canDownload || hasCustomActions);
32
34
  (0, _useFocusRingPortal.useFocusRingPortal)(actionIconRef, {
33
35
  isEnabled: shouldShowKeyboardHighlighting,
34
36
  shape: 'circle'
@@ -37,7 +39,7 @@ const FileItem = ({
37
39
  if (canRemove) {
38
40
  onRemove(id);
39
41
  }
40
- }, [id, onRemove]);
42
+ }, [canRemove, id, onRemove]);
41
43
  const handleItemKeyDown = (0, _react.useCallback)(event => {
42
44
  if (event.key === 'Delete') {
43
45
  event.preventDefault();
@@ -50,7 +52,7 @@ const FileItem = ({
50
52
  event.stopPropagation();
51
53
  handleRemove();
52
54
  }
53
- }, [handleRemove]);
55
+ }, [canRemove, handleRemove]);
54
56
  const humanFileSize = (0, _react.useMemo)(() => {
55
57
  if (typeof size === 'number') {
56
58
  return (0, _file.getHumanSize)(size);
@@ -103,20 +105,26 @@ const FileItem = ({
103
105
  const downloadText = t(_textStrings.default.components.fileItem.download);
104
106
  const removeText = t(_textStrings.default.components.fileItem.remove);
105
107
  const rightElement = (0, _react.useMemo)(() => {
106
- if (!canDownload && !canRemove) return undefined;
107
- // Both actions available → show as ContextMenu
108
- if (canDownload && canRemove) {
109
- const items = [{
110
- icons: ['fa fa-download'],
111
- key: 'download',
112
- onClick: handleDownload,
113
- text: downloadText
114
- }, {
115
- icons: ['fa fa-trash'],
116
- key: 'remove',
117
- onClick: () => onRemove(id),
118
- text: removeText
119
- }];
108
+ if (!canDownload && !canRemove && !hasCustomActions) return undefined;
109
+ if (hasCustomActions || canDownload && canRemove) {
110
+ const items = [];
111
+ if (canDownload) {
112
+ items.push({
113
+ icons: ['fa fa-download'],
114
+ key: 'download',
115
+ onClick: handleDownload,
116
+ text: downloadText
117
+ });
118
+ }
119
+ if (canRemove) {
120
+ items.push({
121
+ icons: ['fa fa-trash'],
122
+ key: 'remove',
123
+ onClick: handleRemove,
124
+ text: removeText
125
+ });
126
+ }
127
+ items.push(...(contextMenuItems ?? []));
120
128
  return /*#__PURE__*/_react.default.createElement(_ContextMenu.default, {
121
129
  items: items
122
130
  });
@@ -139,7 +147,7 @@ const FileItem = ({
139
147
  }, /*#__PURE__*/_react.default.createElement(_Icon.default, {
140
148
  icons: [fileIcon]
141
149
  }));
142
- }, [canDownload, canRemove, downloadText, handleDownload, handleRemoveKeyDown, id, onRemove, removeText]);
150
+ }, [canDownload, canRemove, contextMenuItems, downloadText, handleDownload, handleRemove, handleRemoveKeyDown, hasCustomActions, id, onRemove, removeText]);
143
151
  return (0, _react.useMemo)(() => /*#__PURE__*/_react.default.createElement(_FileItem.StyledFileItem, null, /*#__PURE__*/_react.default.createElement(_FileItem.StyledFileItemKeyboardWrapper, {
144
152
  onKeyDown: handleItemKeyDown,
145
153
  tabIndex: -1
@@ -1 +1 @@
1
- {"version":3,"file":"FileItem.js","names":["_react","_interopRequireWildcard","require","_file","_Icon","_interopRequireDefault","_ContextMenu","_ListItem","_FileItem","_textstrings","_textStrings","_useFocusRingPortal","_useKeyboardFocusHighlighting","e","__esModule","default","t","WeakMap","r","n","o","i","f","__proto__","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","FileItem","mimeType","onRemove","size","name","id","source","shouldAllowDownload","canDownload","canRemove","actionIconRef","useRef","shouldShowKeyboardHighlighting","useKeyboardFocusHighlighting","useFocusRingPortal","isEnabled","shape","handleRemove","useCallback","handleItemKeyDown","event","key","preventDefault","handleRemoveKeyDown","stopPropagation","humanFileSize","useMemo","getHumanSize","undefined","icon","getIconByMimeType","handleDownload","File","url","URL","createObjectURL","a","document","createElement","href","download","body","appendChild","click","removeChild","revokeObjectURL","fetch","then","res","ok","Error","blob","catch","rel","target","useTranslation","downloadText","textStrings","components","fileItem","removeText","remove","rightElement","items","icons","onClick","text","handleClick","handleKeyDown","fileIcon","StyledFileItemIcon","ref","onKeyDown","role","tabIndex","StyledFileItem","StyledFileItemKeyboardWrapper","title","subtitle","rightElements","shouldEnableKeyboardHighlighting","displayName","_default","exports"],"sources":["../../../../../src/components/file-list/file-item/FileItem.tsx"],"sourcesContent":["import React, { FC, KeyboardEventHandler, useCallback, useMemo, useRef } from 'react';\nimport { getHumanSize, getIconByMimeType } from '../../../utils/file';\nimport Icon from '../../icon/Icon';\nimport ContextMenu from '../../context-menu/ContextMenu';\nimport type { ContextMenuItem } from '../../context-menu/ContextMenu.types';\nimport ListItem from '../../list/list-item/ListItem';\nimport type { IFileItem } from '../FileList';\nimport {\n StyledFileItem,\n StyledFileItemActions,\n StyledFileItemKeyboardWrapper,\n StyledFileItemRemoveButton,\n StyledFileItemIcon,\n} from './FileItem.styles';\nimport { useTranslation } from '@chayns/textstrings';\nimport textStrings from '../../../constants/textStrings';\nimport { useFocusRingPortal } from '../../../hooks/useFocusRingPortal';\nimport { useKeyboardFocusHighlighting } from '../../../hooks/useKeyboardFocusHighlighting';\n\nexport type FileItemProps = IFileItem & {\n onRemove?: (name: string) => void;\n shouldAllowDownload?: boolean;\n};\n\nconst FileItem: FC<FileItemProps> = ({\n mimeType,\n onRemove,\n size,\n name,\n id,\n source,\n shouldAllowDownload,\n}) => {\n const canDownload = shouldAllowDownload && !!source;\n const canRemove = typeof onRemove === 'function';\n const actionIconRef = useRef<HTMLDivElement>(null);\n\n const shouldShowKeyboardHighlighting = useKeyboardFocusHighlighting(canRemove || !!canDownload);\n useFocusRingPortal(actionIconRef, {\n isEnabled: shouldShowKeyboardHighlighting,\n shape: 'circle',\n });\n\n const handleRemove = useCallback(() => {\n if (canRemove) {\n onRemove(id);\n }\n }, [id, onRemove]);\n\n const handleItemKeyDown = useCallback<KeyboardEventHandler<HTMLDivElement>>(\n (event) => {\n if (event.key === 'Delete') {\n event.preventDefault();\n handleRemove();\n }\n },\n [handleRemove],\n );\n\n const handleRemoveKeyDown = useCallback<KeyboardEventHandler<HTMLSpanElement>>(\n (event) => {\n if (canRemove && (event.key === 'Enter' || event.key === ' ')) {\n event.preventDefault();\n event.stopPropagation();\n handleRemove();\n }\n },\n [handleRemove],\n );\n\n const humanFileSize = useMemo(() => {\n if (typeof size === 'number') {\n return getHumanSize(size);\n }\n\n return undefined;\n }, [size]);\n\n const icon = useMemo(() => getIconByMimeType(mimeType), [mimeType]);\n\n const handleDownload = useCallback(() => {\n if (!source) return;\n\n if (source instanceof File) {\n const url = URL.createObjectURL(source);\n const a = document.createElement('a');\n a.href = url;\n a.download = name;\n document.body.appendChild(a);\n a.click();\n document.body.removeChild(a);\n URL.revokeObjectURL(url);\n } else {\n // Try fetching as blob to force download. If CORS blocks it,\n // fall back to opening the URL directly.\n fetch(source)\n .then((res) => {\n if (!res.ok) throw new Error('fetch failed');\n return res.blob();\n })\n .then((blob) => {\n const url = URL.createObjectURL(blob);\n const a = document.createElement('a');\n a.href = url;\n a.download = name;\n document.body.appendChild(a);\n a.click();\n document.body.removeChild(a);\n URL.revokeObjectURL(url);\n })\n .catch(() => {\n // CORS or network error: fall back to direct link\n const a = document.createElement('a');\n a.href = source;\n a.download = name;\n a.rel = 'noopener noreferrer';\n a.target = '_blank';\n document.body.appendChild(a);\n a.click();\n document.body.removeChild(a);\n });\n }\n }, [name, source]);\n\n const { t } = useTranslation();\n const downloadText = t(textStrings.components.fileItem.download);\n const removeText = t(textStrings.components.fileItem.remove);\n\n const rightElement = useMemo(() => {\n if (!canDownload && !canRemove) return undefined;\n // Both actions available → show as ContextMenu\n if (canDownload && canRemove) {\n const items: ContextMenuItem[] = [\n {\n icons: ['fa fa-download'],\n key: 'download',\n onClick: handleDownload,\n text: downloadText,\n },\n {\n icons: ['fa fa-trash'],\n key: 'remove',\n onClick: () => onRemove(id),\n text: removeText,\n },\n ];\n\n return <ContextMenu items={items} />;\n }\n\n const handleClick = () => {\n if (canRemove) {\n onRemove(id);\n return;\n }\n\n handleDownload();\n };\n\n const handleKeyDown = canRemove ? handleRemoveKeyDown : undefined;\n\n const fileIcon = canRemove ? 'ts-wrong' : 'fa fa-download';\n\n return (\n <StyledFileItemIcon\n ref={actionIconRef}\n onClick={handleClick}\n onKeyDown={handleKeyDown}\n role=\"button\"\n tabIndex={0}\n >\n <Icon icons={[fileIcon]} />\n </StyledFileItemIcon>\n );\n }, [\n canDownload,\n canRemove,\n downloadText,\n handleDownload,\n handleRemoveKeyDown,\n id,\n onRemove,\n removeText,\n ]);\n\n return useMemo(\n () => (\n <StyledFileItem>\n <StyledFileItemKeyboardWrapper onKeyDown={handleItemKeyDown} tabIndex={-1}>\n <ListItem\n title={name}\n subtitle={humanFileSize}\n icons={[icon]}\n rightElements={rightElement}\n shouldEnableKeyboardHighlighting={shouldShowKeyboardHighlighting}\n />\n </StyledFileItemKeyboardWrapper>\n </StyledFileItem>\n ),\n [\n handleItemKeyDown,\n humanFileSize,\n icon,\n name,\n rightElement,\n shouldShowKeyboardHighlighting,\n ],\n );\n};\n\nFileItem.displayName = 'FileList';\n\nexport default FileItem;\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"FileItem.js","names":["_react","_interopRequireWildcard","require","_file","_Icon","_interopRequireDefault","_ContextMenu","_ListItem","_FileItem","_textstrings","_textStrings","_useFocusRingPortal","_useKeyboardFocusHighlighting","e","__esModule","default","t","WeakMap","r","n","o","i","f","__proto__","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","FileItem","mimeType","onRemove","size","name","id","source","shouldAllowDownload","contextMenuItems","canDownload","canRemove","hasCustomActions","length","actionIconRef","useRef","shouldShowKeyboardHighlighting","useKeyboardFocusHighlighting","useFocusRingPortal","isEnabled","shape","handleRemove","useCallback","handleItemKeyDown","event","key","preventDefault","handleRemoveKeyDown","stopPropagation","humanFileSize","useMemo","getHumanSize","undefined","icon","getIconByMimeType","handleDownload","File","url","URL","createObjectURL","a","document","createElement","href","download","body","appendChild","click","removeChild","revokeObjectURL","fetch","then","res","ok","Error","blob","catch","rel","target","useTranslation","downloadText","textStrings","components","fileItem","removeText","remove","rightElement","items","push","icons","onClick","text","handleClick","handleKeyDown","fileIcon","StyledFileItemIcon","ref","onKeyDown","role","tabIndex","StyledFileItem","StyledFileItemKeyboardWrapper","title","subtitle","rightElements","shouldEnableKeyboardHighlighting","displayName","_default","exports"],"sources":["../../../../../src/components/file-list/file-item/FileItem.tsx"],"sourcesContent":["import React, { FC, KeyboardEventHandler, useCallback, useMemo, useRef } from 'react';\nimport { getHumanSize, getIconByMimeType } from '../../../utils/file';\nimport Icon from '../../icon/Icon';\nimport ContextMenu from '../../context-menu/ContextMenu';\nimport type { ContextMenuItem } from '../../context-menu/ContextMenu.types';\nimport ListItem from '../../list/list-item/ListItem';\nimport type { IFileItem } from '../FileList';\nimport {\n StyledFileItem,\n StyledFileItemKeyboardWrapper,\n StyledFileItemIcon,\n} from './FileItem.styles';\nimport { useTranslation } from '@chayns/textstrings';\nimport textStrings from '../../../constants/textStrings';\nimport { useFocusRingPortal } from '../../../hooks/useFocusRingPortal';\nimport { useKeyboardFocusHighlighting } from '../../../hooks/useKeyboardFocusHighlighting';\n\nexport type FileItemProps = IFileItem & {\n onRemove?: (name: string) => void;\n shouldAllowDownload?: boolean;\n};\n\nconst FileItem: FC<FileItemProps> = ({\n mimeType,\n onRemove,\n size,\n name,\n id,\n source,\n shouldAllowDownload,\n contextMenuItems,\n}) => {\n const canDownload = shouldAllowDownload && !!source;\n const canRemove = typeof onRemove === 'function';\n const hasCustomActions = !!contextMenuItems?.length;\n const actionIconRef = useRef<HTMLDivElement>(null);\n\n const shouldShowKeyboardHighlighting = useKeyboardFocusHighlighting(\n canRemove || !!canDownload || hasCustomActions,\n );\n useFocusRingPortal(actionIconRef, {\n isEnabled: shouldShowKeyboardHighlighting,\n shape: 'circle',\n });\n\n const handleRemove = useCallback(() => {\n if (canRemove) {\n onRemove(id);\n }\n }, [canRemove, id, onRemove]);\n\n const handleItemKeyDown = useCallback<KeyboardEventHandler<HTMLDivElement>>(\n (event) => {\n if (event.key === 'Delete') {\n event.preventDefault();\n handleRemove();\n }\n },\n [handleRemove],\n );\n\n const handleRemoveKeyDown = useCallback<KeyboardEventHandler<HTMLSpanElement>>(\n (event) => {\n if (canRemove && (event.key === 'Enter' || event.key === ' ')) {\n event.preventDefault();\n event.stopPropagation();\n handleRemove();\n }\n },\n [canRemove, handleRemove],\n );\n\n const humanFileSize = useMemo(() => {\n if (typeof size === 'number') {\n return getHumanSize(size);\n }\n\n return undefined;\n }, [size]);\n\n const icon = useMemo(() => getIconByMimeType(mimeType), [mimeType]);\n\n const handleDownload = useCallback(() => {\n if (!source) return;\n\n if (source instanceof File) {\n const url = URL.createObjectURL(source);\n const a = document.createElement('a');\n a.href = url;\n a.download = name;\n document.body.appendChild(a);\n a.click();\n document.body.removeChild(a);\n URL.revokeObjectURL(url);\n } else {\n // Try fetching as blob to force download. If CORS blocks it,\n // fall back to opening the URL directly.\n fetch(source)\n .then((res) => {\n if (!res.ok) throw new Error('fetch failed');\n return res.blob();\n })\n .then((blob) => {\n const url = URL.createObjectURL(blob);\n const a = document.createElement('a');\n a.href = url;\n a.download = name;\n document.body.appendChild(a);\n a.click();\n document.body.removeChild(a);\n URL.revokeObjectURL(url);\n })\n .catch(() => {\n // CORS or network error: fall back to direct link\n const a = document.createElement('a');\n a.href = source;\n a.download = name;\n a.rel = 'noopener noreferrer';\n a.target = '_blank';\n document.body.appendChild(a);\n a.click();\n document.body.removeChild(a);\n });\n }\n }, [name, source]);\n\n const { t } = useTranslation();\n const downloadText = t(textStrings.components.fileItem.download);\n const removeText = t(textStrings.components.fileItem.remove);\n\n const rightElement = useMemo(() => {\n if (!canDownload && !canRemove && !hasCustomActions) return undefined;\n\n if (hasCustomActions || (canDownload && canRemove)) {\n const items: ContextMenuItem[] = [];\n\n if (canDownload) {\n items.push({\n icons: ['fa fa-download'],\n key: 'download',\n onClick: handleDownload,\n text: downloadText,\n });\n }\n\n if (canRemove) {\n items.push({\n icons: ['fa fa-trash'],\n key: 'remove',\n onClick: handleRemove,\n text: removeText,\n });\n }\n\n items.push(...(contextMenuItems ?? []));\n\n return <ContextMenu items={items} />;\n }\n\n const handleClick = () => {\n if (canRemove) {\n onRemove(id);\n return;\n }\n\n handleDownload();\n };\n\n const handleKeyDown = canRemove ? handleRemoveKeyDown : undefined;\n\n const fileIcon = canRemove ? 'ts-wrong' : 'fa fa-download';\n\n return (\n <StyledFileItemIcon\n ref={actionIconRef}\n onClick={handleClick}\n onKeyDown={handleKeyDown}\n role=\"button\"\n tabIndex={0}\n >\n <Icon icons={[fileIcon]} />\n </StyledFileItemIcon>\n );\n }, [\n canDownload,\n canRemove,\n contextMenuItems,\n downloadText,\n handleDownload,\n handleRemove,\n handleRemoveKeyDown,\n hasCustomActions,\n id,\n onRemove,\n removeText,\n ]);\n\n return useMemo(\n () => (\n <StyledFileItem>\n <StyledFileItemKeyboardWrapper onKeyDown={handleItemKeyDown} tabIndex={-1}>\n <ListItem\n title={name}\n subtitle={humanFileSize}\n icons={[icon]}\n rightElements={rightElement}\n shouldEnableKeyboardHighlighting={shouldShowKeyboardHighlighting}\n />\n </StyledFileItemKeyboardWrapper>\n </StyledFileItem>\n ),\n [\n handleItemKeyDown,\n humanFileSize,\n icon,\n name,\n rightElement,\n shouldShowKeyboardHighlighting,\n ],\n );\n};\n\nFileItem.displayName = 'FileList';\n\nexport default FileItem;\n"],"mappings":"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","ignoreList":[]}
@@ -6,6 +6,7 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports.default = void 0;
7
7
  var _reactCompilerRuntime = require("react-compiler-runtime");
8
8
  var _react = _interopRequireWildcard(require("react"));
9
+ var _styledComponents = require("styled-components");
9
10
  var _AreaContextProvider = require("../area-provider/AreaContextProvider");
10
11
  var _Input = require("../input/Input.styles");
11
12
  var _TextArea = require("./TextArea.styles");
@@ -17,7 +18,7 @@ const TextArea = /*#__PURE__*/(0, _react.forwardRef)((t0, ref) => {
17
18
  "use memo";
18
19
 
19
20
  var _rightElement$props;
20
- const $ = (0, _reactCompilerRuntime.c)(31);
21
+ const $ = (0, _reactCompilerRuntime.c)(32);
21
22
  const {
22
23
  isDisabled,
23
24
  isInvalid,
@@ -37,6 +38,7 @@ const TextArea = /*#__PURE__*/(0, _react.forwardRef)((t0, ref) => {
37
38
  const minHeight = t2 === undefined ? "41px" : t2;
38
39
  const [isOverflowing, setIsOverflowing] = (0, _react.useState)(false);
39
40
  const areaProvider = (0, _react.useContext)(_AreaContextProvider.AreaContext);
41
+ const theme = (0, _styledComponents.useTheme)();
40
42
  const textareaRef = (0, _react.useRef)(null);
41
43
  (0, _resize.useCursorRepaint)(textareaRef);
42
44
  const shouldShowBorder = (rightElement === null || rightElement === void 0 || (_rightElement$props = rightElement.props) === null || _rightElement$props === void 0 || (_rightElement$props = _rightElement$props.style) === null || _rightElement$props === void 0 ? void 0 : _rightElement$props.backgroundColor) === undefined;
@@ -111,7 +113,7 @@ const TextArea = /*#__PURE__*/(0, _react.forwardRef)((t0, ref) => {
111
113
  }
112
114
  const labelPosition = t8;
113
115
  let t9;
114
- if ($[11] !== (colors === null || colors === void 0 ? void 0 : colors.backgroundColor) || $[12] !== (colors === null || colors === void 0 ? void 0 : colors.borderColor) || $[13] !== hasValue || $[14] !== isDisabled || $[15] !== isInvalid || $[16] !== isOverflowing || $[17] !== labelPosition || $[18] !== maxHeight || $[19] !== minHeight || $[20] !== onBlur || $[21] !== onChange || $[22] !== onFocus || $[23] !== onKeyDown || $[24] !== placeholder || $[25] !== rightElement || $[26] !== shouldChangeColor || $[27] !== shouldShowBorder || $[28] !== shouldShowKeyboardHighlighting || $[29] !== value) {
116
+ if ($[11] !== (colors === null || colors === void 0 ? void 0 : colors.backgroundColor) || $[12] !== (colors === null || colors === void 0 ? void 0 : colors.borderColor) || $[13] !== hasValue || $[14] !== isDisabled || $[15] !== isInvalid || $[16] !== isOverflowing || $[17] !== labelPosition || $[18] !== maxHeight || $[19] !== minHeight || $[20] !== onBlur || $[21] !== onChange || $[22] !== onFocus || $[23] !== onKeyDown || $[24] !== placeholder || $[25] !== rightElement || $[26] !== shouldChangeColor || $[27] !== shouldShowBorder || $[28] !== shouldShowKeyboardHighlighting || $[29] !== theme.fontSize || $[30] !== value) {
115
117
  colors === null || colors === void 0 || colors.backgroundColor;
116
118
  colors === null || colors === void 0 || colors.borderColor;
117
119
  t9 = (() => /*#__PURE__*/_react.default.createElement(_TextArea.StyledTextArea, {
@@ -138,7 +140,7 @@ const TextArea = /*#__PURE__*/(0, _react.forwardRef)((t0, ref) => {
138
140
  rows: 1
139
141
  }), /*#__PURE__*/_react.default.createElement(_TextArea.StyledTextAreaLabelWrapper, {
140
142
  animate: {
141
- fontSize: hasValue ? "9px" : undefined
143
+ fontSize: hasValue ? "9px" : `${Number(theme.fontSize)}px`
142
144
  },
143
145
  initial: false,
144
146
  style: labelPosition,
@@ -171,10 +173,11 @@ const TextArea = /*#__PURE__*/(0, _react.forwardRef)((t0, ref) => {
171
173
  $[26] = shouldChangeColor;
172
174
  $[27] = shouldShowBorder;
173
175
  $[28] = shouldShowKeyboardHighlighting;
174
- $[29] = value;
175
- $[30] = t9;
176
+ $[29] = theme.fontSize;
177
+ $[30] = value;
178
+ $[31] = t9;
176
179
  } else {
177
- t9 = $[30];
180
+ t9 = $[31];
178
181
  }
179
182
  return t9;
180
183
  });
@@ -1 +1 @@
1
- {"version":3,"file":"TextArea.js","names":["_react","_interopRequireWildcard","require","_AreaContextProvider","_Input","_TextArea","_resize","_useFocusRingPortal","_useKeyboardFocusHighlighting","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","TextArea","forwardRef","t0","ref","_rightElement$props","$","_reactCompilerRuntime","c","isDisabled","isInvalid","placeholder","value","onChange","onFocus","onKeyDown","rightElement","onBlur","maxHeight","t1","minHeight","t2","colors","shouldEnableKeyboardHighlighting","undefined","isOverflowing","setIsOverflowing","useState","areaProvider","useContext","AreaContext","textareaRef","useRef","useCursorRepaint","shouldShowBorder","props","style","backgroundColor","shouldChangeColor","shouldShowKeyboardHighlighting","useKeyboardFocusHighlighting","t3","isEnabled","useFocusRingPortal","t4","current","height","scrollHeight","parseInt","toString","adjustTextareaHeight","t5","Symbol","for","useImperativeHandle","t6","t7","length","useEffect","hasValue","t8","bottom","right","top","left","labelPosition","t9","borderColor","createElement","StyledTextArea","StyledTextAreaContentWrapper","$backgroundColor","$borderColor","StyledTextAreaContent","StyledTextAreaInput","className","rows","StyledTextAreaLabelWrapper","animate","fontSize","initial","transition","type","duration","StyledTextAreaLabel","StyledInputRightElement","$isInline","StyledRightElementWrapper","displayName","_default","exports"],"sources":["../../../../src/components/text-area/TextArea.tsx"],"sourcesContent":["import React, {\n ChangeEventHandler,\n CSSProperties,\n FocusEventHandler,\n forwardRef,\n KeyboardEventHandler,\n ReactElement,\n useCallback,\n useContext,\n useEffect,\n useImperativeHandle,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport { AreaContext } from '../area-provider/AreaContextProvider';\nimport { StyledInputRightElement } from '../input/Input.styles';\nimport {\n StyledRightElementWrapper,\n StyledTextArea,\n StyledTextAreaContent,\n StyledTextAreaContentWrapper,\n StyledTextAreaInput,\n StyledTextAreaLabel,\n StyledTextAreaLabelWrapper,\n} from './TextArea.styles';\nimport { useCursorRepaint } from '../../hooks/resize';\nimport { useFocusRingPortal } from '../../hooks/useFocusRingPortal';\nimport { useKeyboardFocusHighlighting } from '../../hooks/useKeyboardFocusHighlighting';\n\ntype TextAreaColors = {\n backgroundColor: CSSProperties['backgroundColor'];\n borderColor: CSSProperties['borderColor'];\n};\n\nexport type TextAreaProps = {\n /**\n * Disables the text area so that it cannot be changed.\n */\n isDisabled?: boolean;\n /**\n * If true, the text area is marked as invalid\n */\n isInvalid?: boolean;\n /**\n * The maximum height of the text area.\n */\n maxHeight?: CSSProperties['maxHeight'];\n /**\n * The minimum height of the text area.\n */\n minHeight?: CSSProperties['minHeight'];\n /**\n * Function that is executed when the text area loses focus.\n */\n onBlur?: FocusEventHandler<HTMLTextAreaElement>;\n /**\n * Function that is executed when the text of the text area changes.\n */\n onChange?: ChangeEventHandler<HTMLTextAreaElement>;\n /**\n * Function that is executed when the input field is focused\n */\n onFocus?: FocusEventHandler<HTMLTextAreaElement>;\n /**\n * Function that is executed when a letter is pressed\n */\n onKeyDown?: KeyboardEventHandler<HTMLTextAreaElement>;\n /**\n * Placeholder for the text area field.\n */\n placeholder?: string | ReactElement;\n /**\n * An element that should be displayed on the right side of the Input.\n */\n rightElement?: ReactElement;\n /**\n * Value if the text area should be controlled.\n */\n value?: string;\n /**\n * Provide custom colors to the TextArea Component\n */\n colors?: TextAreaColors;\n /**\n * Enables keyboard-only focus highlighting.\n */\n shouldEnableKeyboardHighlighting?: boolean;\n};\n\nconst TextArea = forwardRef<HTMLTextAreaElement, TextAreaProps>(\n (\n {\n isDisabled,\n isInvalid,\n placeholder,\n value,\n onChange,\n onFocus,\n onKeyDown,\n rightElement,\n onBlur,\n maxHeight = '120px',\n minHeight = '41px',\n colors,\n shouldEnableKeyboardHighlighting,\n },\n ref,\n ) => {\n 'use memo';\n\n const [isOverflowing, setIsOverflowing] = useState(false);\n\n const areaProvider = useContext(AreaContext);\n\n const textareaRef = useRef<HTMLTextAreaElement>(null);\n\n useCursorRepaint(textareaRef);\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n const shouldShowBorder = rightElement?.props?.style?.backgroundColor === undefined;\n\n const shouldChangeColor = useMemo(\n () => areaProvider.shouldChangeColor ?? false,\n [areaProvider.shouldChangeColor],\n );\n\n const shouldShowKeyboardHighlighting = useKeyboardFocusHighlighting(\n shouldEnableKeyboardHighlighting && !isDisabled,\n );\n useFocusRingPortal(textareaRef, { isEnabled: shouldShowKeyboardHighlighting });\n\n const adjustTextareaHeight = useCallback(() => {\n if (textareaRef.current) {\n textareaRef.current.style.height = 'auto';\n textareaRef.current.style.height = `${textareaRef.current.scrollHeight}px`;\n\n setIsOverflowing(\n textareaRef.current.scrollHeight > parseInt(maxHeight.toString(), 10),\n );\n }\n }, [maxHeight]);\n\n useImperativeHandle(ref, () => textareaRef.current as HTMLTextAreaElement);\n\n /**\n * This hook calculates the height of the TextArea after the displayValue is changed and the content is inside the \"textareaRef\".\n * To maintain the functionality while clearing the input, the length need to be greater than -1.\n */\n useEffect(() => {\n if (typeof value === 'string' && value.length > -1) {\n adjustTextareaHeight();\n }\n }, [adjustTextareaHeight, value]);\n\n const hasValue = value !== undefined && value.length > 0;\n\n const labelPosition = useMemo(\n () =>\n hasValue\n ? {\n bottom: '2px',\n right: '2px',\n }\n : {\n top: '12px',\n left: '10px',\n },\n [hasValue],\n );\n\n return useMemo(\n () => (\n <StyledTextArea $isDisabled={isDisabled}>\n <StyledTextAreaContentWrapper\n $isInvalid={isInvalid}\n $shouldChangeColor={shouldChangeColor}\n $backgroundColor={colors?.backgroundColor}\n $borderColor={colors?.borderColor}\n data-should-show-keyboard-highlighting={shouldShowKeyboardHighlighting}\n >\n <StyledTextAreaContent>\n <StyledTextAreaInput\n className=\"chayns-scrollbar\"\n disabled={isDisabled}\n $isInvalid={isInvalid}\n ref={textareaRef}\n value={value}\n onBlur={onBlur}\n onChange={onChange}\n onFocus={onFocus}\n onKeyDown={onKeyDown}\n $maxHeight={maxHeight}\n $minHeight={minHeight}\n $isOverflowing={isOverflowing}\n rows={1}\n />\n <StyledTextAreaLabelWrapper\n animate={{ fontSize: hasValue ? '9px' : undefined }}\n initial={false}\n style={labelPosition}\n transition={{ type: 'tween', duration: 0.1 }}\n >\n <StyledTextAreaLabel $isInvalid={isInvalid}>\n {placeholder}\n </StyledTextAreaLabel>\n </StyledTextAreaLabelWrapper>\n </StyledTextAreaContent>\n {rightElement && shouldShowBorder && (\n <StyledInputRightElement $isInline>\n <StyledRightElementWrapper>\n {rightElement}\n </StyledRightElementWrapper>\n </StyledInputRightElement>\n )}\n </StyledTextAreaContentWrapper>\n {rightElement && !shouldShowBorder && (\n <StyledInputRightElement $isInline>\n <StyledRightElementWrapper>{rightElement}</StyledRightElementWrapper>\n </StyledInputRightElement>\n )}\n </StyledTextArea>\n ),\n [\n isDisabled,\n isInvalid,\n shouldChangeColor,\n shouldShowKeyboardHighlighting,\n colors?.backgroundColor,\n colors?.borderColor,\n value,\n onBlur,\n onChange,\n onFocus,\n onKeyDown,\n maxHeight,\n minHeight,\n isOverflowing,\n hasValue,\n labelPosition,\n placeholder,\n rightElement,\n shouldShowBorder,\n ],\n );\n },\n);\n\nTextArea.displayName = 'TextArea';\n\nexport default TextArea;\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"TextArea.js","names":["_react","_interopRequireWildcard","require","_styledComponents","_AreaContextProvider","_Input","_TextArea","_resize","_useFocusRingPortal","_useKeyboardFocusHighlighting","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","TextArea","forwardRef","t0","ref","_rightElement$props","$","_reactCompilerRuntime","c","isDisabled","isInvalid","placeholder","value","onChange","onFocus","onKeyDown","rightElement","onBlur","maxHeight","t1","minHeight","t2","colors","shouldEnableKeyboardHighlighting","undefined","isOverflowing","setIsOverflowing","useState","areaProvider","useContext","AreaContext","theme","useTheme","textareaRef","useRef","useCursorRepaint","shouldShowBorder","props","style","backgroundColor","shouldChangeColor","shouldShowKeyboardHighlighting","useKeyboardFocusHighlighting","t3","isEnabled","useFocusRingPortal","t4","current","height","scrollHeight","parseInt","toString","adjustTextareaHeight","t5","Symbol","for","useImperativeHandle","t6","t7","length","useEffect","hasValue","t8","bottom","right","top","left","labelPosition","t9","borderColor","fontSize","createElement","StyledTextArea","StyledTextAreaContentWrapper","$backgroundColor","$borderColor","StyledTextAreaContent","StyledTextAreaInput","className","rows","StyledTextAreaLabelWrapper","animate","Number","initial","transition","type","duration","StyledTextAreaLabel","StyledInputRightElement","$isInline","StyledRightElementWrapper","displayName","_default","exports"],"sources":["../../../../src/components/text-area/TextArea.tsx"],"sourcesContent":["import React, {\n ChangeEventHandler,\n CSSProperties,\n FocusEventHandler,\n forwardRef,\n KeyboardEventHandler,\n ReactElement,\n useCallback,\n useContext,\n useEffect,\n useImperativeHandle,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport { useTheme } from 'styled-components';\nimport { AreaContext } from '../area-provider/AreaContextProvider';\nimport type { Theme } from '../color-scheme-provider/ColorSchemeProvider';\nimport { StyledInputRightElement } from '../input/Input.styles';\nimport {\n StyledRightElementWrapper,\n StyledTextArea,\n StyledTextAreaContent,\n StyledTextAreaContentWrapper,\n StyledTextAreaInput,\n StyledTextAreaLabel,\n StyledTextAreaLabelWrapper,\n} from './TextArea.styles';\nimport { useCursorRepaint } from '../../hooks/resize';\nimport { useFocusRingPortal } from '../../hooks/useFocusRingPortal';\nimport { useKeyboardFocusHighlighting } from '../../hooks/useKeyboardFocusHighlighting';\n\ntype TextAreaColors = {\n backgroundColor: CSSProperties['backgroundColor'];\n borderColor: CSSProperties['borderColor'];\n};\n\nexport type TextAreaProps = {\n /**\n * Disables the text area so that it cannot be changed.\n */\n isDisabled?: boolean;\n /**\n * If true, the text area is marked as invalid\n */\n isInvalid?: boolean;\n /**\n * The maximum height of the text area.\n */\n maxHeight?: CSSProperties['maxHeight'];\n /**\n * The minimum height of the text area.\n */\n minHeight?: CSSProperties['minHeight'];\n /**\n * Function that is executed when the text area loses focus.\n */\n onBlur?: FocusEventHandler<HTMLTextAreaElement>;\n /**\n * Function that is executed when the text of the text area changes.\n */\n onChange?: ChangeEventHandler<HTMLTextAreaElement>;\n /**\n * Function that is executed when the input field is focused\n */\n onFocus?: FocusEventHandler<HTMLTextAreaElement>;\n /**\n * Function that is executed when a letter is pressed\n */\n onKeyDown?: KeyboardEventHandler<HTMLTextAreaElement>;\n /**\n * Placeholder for the text area field.\n */\n placeholder?: string | ReactElement;\n /**\n * An element that should be displayed on the right side of the Input.\n */\n rightElement?: ReactElement;\n /**\n * Value if the text area should be controlled.\n */\n value?: string;\n /**\n * Provide custom colors to the TextArea Component\n */\n colors?: TextAreaColors;\n /**\n * Enables keyboard-only focus highlighting.\n */\n shouldEnableKeyboardHighlighting?: boolean;\n};\n\nconst TextArea = forwardRef<HTMLTextAreaElement, TextAreaProps>(\n (\n {\n isDisabled,\n isInvalid,\n placeholder,\n value,\n onChange,\n onFocus,\n onKeyDown,\n rightElement,\n onBlur,\n maxHeight = '120px',\n minHeight = '41px',\n colors,\n shouldEnableKeyboardHighlighting,\n },\n ref,\n ) => {\n 'use memo';\n\n const [isOverflowing, setIsOverflowing] = useState(false);\n\n const areaProvider = useContext(AreaContext);\n const theme = useTheme() as Theme;\n\n const textareaRef = useRef<HTMLTextAreaElement>(null);\n\n useCursorRepaint(textareaRef);\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n const shouldShowBorder = rightElement?.props?.style?.backgroundColor === undefined;\n\n const shouldChangeColor = useMemo(\n () => areaProvider.shouldChangeColor ?? false,\n [areaProvider.shouldChangeColor],\n );\n\n const shouldShowKeyboardHighlighting = useKeyboardFocusHighlighting(\n shouldEnableKeyboardHighlighting && !isDisabled,\n );\n useFocusRingPortal(textareaRef, { isEnabled: shouldShowKeyboardHighlighting });\n\n const adjustTextareaHeight = useCallback(() => {\n if (textareaRef.current) {\n textareaRef.current.style.height = 'auto';\n textareaRef.current.style.height = `${textareaRef.current.scrollHeight}px`;\n\n setIsOverflowing(\n textareaRef.current.scrollHeight > parseInt(maxHeight.toString(), 10),\n );\n }\n }, [maxHeight]);\n\n useImperativeHandle(ref, () => textareaRef.current as HTMLTextAreaElement);\n\n /**\n * This hook calculates the height of the TextArea after the displayValue is changed and the content is inside the \"textareaRef\".\n * To maintain the functionality while clearing the input, the length need to be greater than -1.\n */\n useEffect(() => {\n if (typeof value === 'string' && value.length > -1) {\n adjustTextareaHeight();\n }\n }, [adjustTextareaHeight, value]);\n\n const hasValue = value !== undefined && value.length > 0;\n\n const labelPosition = useMemo(\n () =>\n hasValue\n ? {\n bottom: '2px',\n right: '2px',\n }\n : {\n top: '12px',\n left: '10px',\n },\n [hasValue],\n );\n\n return useMemo(\n () => (\n <StyledTextArea $isDisabled={isDisabled}>\n <StyledTextAreaContentWrapper\n $isInvalid={isInvalid}\n $shouldChangeColor={shouldChangeColor}\n $backgroundColor={colors?.backgroundColor}\n $borderColor={colors?.borderColor}\n data-should-show-keyboard-highlighting={shouldShowKeyboardHighlighting}\n >\n <StyledTextAreaContent>\n <StyledTextAreaInput\n className=\"chayns-scrollbar\"\n disabled={isDisabled}\n $isInvalid={isInvalid}\n ref={textareaRef}\n value={value}\n onBlur={onBlur}\n onChange={onChange}\n onFocus={onFocus}\n onKeyDown={onKeyDown}\n $maxHeight={maxHeight}\n $minHeight={minHeight}\n $isOverflowing={isOverflowing}\n rows={1}\n />\n <StyledTextAreaLabelWrapper\n animate={{\n fontSize: hasValue ? '9px' : `${Number(theme.fontSize)}px`,\n }}\n initial={false}\n style={labelPosition}\n transition={{ type: 'tween', duration: 0.1 }}\n >\n <StyledTextAreaLabel $isInvalid={isInvalid}>\n {placeholder}\n </StyledTextAreaLabel>\n </StyledTextAreaLabelWrapper>\n </StyledTextAreaContent>\n {rightElement && shouldShowBorder && (\n <StyledInputRightElement $isInline>\n <StyledRightElementWrapper>\n {rightElement}\n </StyledRightElementWrapper>\n </StyledInputRightElement>\n )}\n </StyledTextAreaContentWrapper>\n {rightElement && !shouldShowBorder && (\n <StyledInputRightElement $isInline>\n <StyledRightElementWrapper>{rightElement}</StyledRightElementWrapper>\n </StyledInputRightElement>\n )}\n </StyledTextArea>\n ),\n [\n isDisabled,\n isInvalid,\n shouldChangeColor,\n shouldShowKeyboardHighlighting,\n colors?.backgroundColor,\n colors?.borderColor,\n value,\n onBlur,\n onChange,\n onFocus,\n onKeyDown,\n maxHeight,\n minHeight,\n isOverflowing,\n hasValue,\n theme.fontSize,\n labelPosition,\n placeholder,\n rightElement,\n shouldShowBorder,\n ],\n );\n },\n);\n\nTextArea.displayName = 'TextArea';\n\nexport default TextArea;\n"],"mappings":"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","ignoreList":[]}
@@ -13,7 +13,8 @@ const FileList = ({
13
13
  size,
14
14
  name,
15
15
  id,
16
- source
16
+ source,
17
+ contextMenuItems
17
18
  }) => /*#__PURE__*/React.createElement(FileItem, {
18
19
  key: id,
19
20
  id: id,
@@ -21,6 +22,7 @@ const FileList = ({
21
22
  size: size,
22
23
  mimeType: mimeType,
23
24
  source: source,
25
+ contextMenuItems: contextMenuItems,
24
26
  onRemove: onRemove,
25
27
  shouldAllowDownload: shouldAllowDownload
26
28
  })), [files, onRemove, shouldAllowDownload]);
@@ -1 +1 @@
1
- {"version":3,"file":"FileList.js","names":["React","useMemo","TextStringProviderSSR","List","StyledFileList","FileItem","FileList","files","onRemove","shouldAllowDownload","content","map","mimeType","size","name","id","source","createElement","key","libraries","displayName"],"sources":["../../../../src/components/file-list/FileList.tsx"],"sourcesContent":["import React, { FC, useMemo } from 'react';\nimport { TextStringProviderSSR } from '@chayns/textstrings';\nimport List from '../list/List';\nimport { StyledFileList } from './FileList.styles';\nimport FileItem from './file-item/FileItem';\n\nexport interface IFileItem {\n id: string;\n name: string;\n size?: number;\n mimeType: string;\n source?: string | File;\n}\n\nexport type FileListProps = {\n /**\n * Already uploaded files to display.\n */\n files?: IFileItem[];\n /**\n * A function to be executed when a file is removed.\n */\n onRemove?: (id: IFileItem['id']) => void;\n /**\n * Whether to show a download icon for files that have a `source` set.\n */\n shouldAllowDownload?: boolean;\n};\n\nconst FileList: FC<FileListProps> = ({ files, onRemove, shouldAllowDownload }) => {\n const content = useMemo(\n () =>\n files?.map(({ mimeType, size, name, id, source }) => (\n <FileItem\n key={id}\n id={id}\n name={name}\n size={size}\n mimeType={mimeType}\n source={source}\n onRemove={onRemove}\n shouldAllowDownload={shouldAllowDownload}\n />\n )),\n [files, onRemove, shouldAllowDownload],\n );\n\n return useMemo(\n () => (\n <TextStringProviderSSR libraries=\"chayns-components-v5-core\" id=\"file-list\">\n <StyledFileList>\n <List>{content}</List>\n </StyledFileList>\n </TextStringProviderSSR>\n ),\n [content],\n );\n};\n\nFileList.displayName = 'FileList';\n\nexport default FileList;\n"],"mappings":"AAAA,OAAOA,KAAK,IAAQC,OAAO,QAAQ,OAAO;AAC1C,SAASC,qBAAqB,QAAQ,qBAAqB;AAC3D,OAAOC,IAAI,MAAM,cAAc;AAC/B,SAASC,cAAc,QAAQ,mBAAmB;AAClD,OAAOC,QAAQ,MAAM,sBAAsB;AAyB3C,MAAMC,QAA2B,GAAGA,CAAC;EAAEC,KAAK;EAAEC,QAAQ;EAAEC;AAAoB,CAAC,KAAK;EAC9E,MAAMC,OAAO,GAAGT,OAAO,CACnB,MACIM,KAAK,EAAEI,GAAG,CAAC,CAAC;IAAEC,QAAQ;IAAEC,IAAI;IAAEC,IAAI;IAAEC,EAAE;IAAEC;EAAO,CAAC,kBAC5ChB,KAAA,CAAAiB,aAAA,CAACZ,QAAQ;IACLa,GAAG,EAAEH,EAAG;IACRA,EAAE,EAAEA,EAAG;IACPD,IAAI,EAAEA,IAAK;IACXD,IAAI,EAAEA,IAAK;IACXD,QAAQ,EAAEA,QAAS;IACnBI,MAAM,EAAEA,MAAO;IACfR,QAAQ,EAAEA,QAAS;IACnBC,mBAAmB,EAAEA;EAAoB,CAC5C,CACJ,CAAC,EACN,CAACF,KAAK,EAAEC,QAAQ,EAAEC,mBAAmB,CACzC,CAAC;EAED,OAAOR,OAAO,CACV,mBACID,KAAA,CAAAiB,aAAA,CAACf,qBAAqB;IAACiB,SAAS,EAAC,2BAA2B;IAACJ,EAAE,EAAC;EAAW,gBACvEf,KAAA,CAAAiB,aAAA,CAACb,cAAc,qBACXJ,KAAA,CAAAiB,aAAA,CAACd,IAAI,QAAEO,OAAc,CACT,CACG,CAC1B,EACD,CAACA,OAAO,CACZ,CAAC;AACL,CAAC;AAEDJ,QAAQ,CAACc,WAAW,GAAG,UAAU;AAEjC,eAAed,QAAQ","ignoreList":[]}
1
+ {"version":3,"file":"FileList.js","names":["React","useMemo","TextStringProviderSSR","List","StyledFileList","FileItem","FileList","files","onRemove","shouldAllowDownload","content","map","mimeType","size","name","id","source","contextMenuItems","createElement","key","libraries","displayName"],"sources":["../../../../src/components/file-list/FileList.tsx"],"sourcesContent":["import React, { FC, useMemo } from 'react';\nimport { TextStringProviderSSR } from '@chayns/textstrings';\nimport List from '../list/List';\nimport { StyledFileList } from './FileList.styles';\nimport FileItem from './file-item/FileItem';\nimport type { ContextMenuItem } from '../context-menu/ContextMenu.types';\n\nexport interface IFileItem {\n id: string;\n name: string;\n size?: number;\n mimeType: string;\n source?: string | File;\n /**\n * Additional context menu actions, appended after the built-in download and remove actions.\n * Use keys other than `download` and `remove` when those built-in actions are enabled.\n */\n contextMenuItems?: ContextMenuItem[];\n}\n\nexport type FileListProps = {\n /**\n * Already uploaded files to display.\n */\n files?: IFileItem[];\n /**\n * A function to be executed when a file is removed.\n */\n onRemove?: (id: IFileItem['id']) => void;\n /**\n * Whether to show a download icon for files that have a `source` set.\n */\n shouldAllowDownload?: boolean;\n};\n\nconst FileList: FC<FileListProps> = ({ files, onRemove, shouldAllowDownload }) => {\n const content = useMemo(\n () =>\n files?.map(({ mimeType, size, name, id, source, contextMenuItems }) => (\n <FileItem\n key={id}\n id={id}\n name={name}\n size={size}\n mimeType={mimeType}\n source={source}\n contextMenuItems={contextMenuItems}\n onRemove={onRemove}\n shouldAllowDownload={shouldAllowDownload}\n />\n )),\n [files, onRemove, shouldAllowDownload],\n );\n\n return useMemo(\n () => (\n <TextStringProviderSSR libraries=\"chayns-components-v5-core\" id=\"file-list\">\n <StyledFileList>\n <List>{content}</List>\n </StyledFileList>\n </TextStringProviderSSR>\n ),\n [content],\n );\n};\n\nFileList.displayName = 'FileList';\n\nexport default FileList;\n"],"mappings":"AAAA,OAAOA,KAAK,IAAQC,OAAO,QAAQ,OAAO;AAC1C,SAASC,qBAAqB,QAAQ,qBAAqB;AAC3D,OAAOC,IAAI,MAAM,cAAc;AAC/B,SAASC,cAAc,QAAQ,mBAAmB;AAClD,OAAOC,QAAQ,MAAM,sBAAsB;AA+B3C,MAAMC,QAA2B,GAAGA,CAAC;EAAEC,KAAK;EAAEC,QAAQ;EAAEC;AAAoB,CAAC,KAAK;EAC9E,MAAMC,OAAO,GAAGT,OAAO,CACnB,MACIM,KAAK,EAAEI,GAAG,CAAC,CAAC;IAAEC,QAAQ;IAAEC,IAAI;IAAEC,IAAI;IAAEC,EAAE;IAAEC,MAAM;IAAEC;EAAiB,CAAC,kBAC9DjB,KAAA,CAAAkB,aAAA,CAACb,QAAQ;IACLc,GAAG,EAAEJ,EAAG;IACRA,EAAE,EAAEA,EAAG;IACPD,IAAI,EAAEA,IAAK;IACXD,IAAI,EAAEA,IAAK;IACXD,QAAQ,EAAEA,QAAS;IACnBI,MAAM,EAAEA,MAAO;IACfC,gBAAgB,EAAEA,gBAAiB;IACnCT,QAAQ,EAAEA,QAAS;IACnBC,mBAAmB,EAAEA;EAAoB,CAC5C,CACJ,CAAC,EACN,CAACF,KAAK,EAAEC,QAAQ,EAAEC,mBAAmB,CACzC,CAAC;EAED,OAAOR,OAAO,CACV,mBACID,KAAA,CAAAkB,aAAA,CAAChB,qBAAqB;IAACkB,SAAS,EAAC,2BAA2B;IAACL,EAAE,EAAC;EAAW,gBACvEf,KAAA,CAAAkB,aAAA,CAACd,cAAc,qBACXJ,KAAA,CAAAkB,aAAA,CAACf,IAAI,QAAEO,OAAc,CACT,CACG,CAC1B,EACD,CAACA,OAAO,CACZ,CAAC;AACL,CAAC;AAEDJ,QAAQ,CAACe,WAAW,GAAG,UAAU;AAEjC,eAAef,QAAQ","ignoreList":[]}
@@ -15,12 +15,14 @@ const FileItem = ({
15
15
  name,
16
16
  id,
17
17
  source,
18
- shouldAllowDownload
18
+ shouldAllowDownload,
19
+ contextMenuItems
19
20
  }) => {
20
21
  const canDownload = shouldAllowDownload && !!source;
21
22
  const canRemove = typeof onRemove === 'function';
23
+ const hasCustomActions = !!contextMenuItems?.length;
22
24
  const actionIconRef = useRef(null);
23
- const shouldShowKeyboardHighlighting = useKeyboardFocusHighlighting(canRemove || !!canDownload);
25
+ const shouldShowKeyboardHighlighting = useKeyboardFocusHighlighting(canRemove || !!canDownload || hasCustomActions);
24
26
  useFocusRingPortal(actionIconRef, {
25
27
  isEnabled: shouldShowKeyboardHighlighting,
26
28
  shape: 'circle'
@@ -29,7 +31,7 @@ const FileItem = ({
29
31
  if (canRemove) {
30
32
  onRemove(id);
31
33
  }
32
- }, [id, onRemove]);
34
+ }, [canRemove, id, onRemove]);
33
35
  const handleItemKeyDown = useCallback(event => {
34
36
  if (event.key === 'Delete') {
35
37
  event.preventDefault();
@@ -42,7 +44,7 @@ const FileItem = ({
42
44
  event.stopPropagation();
43
45
  handleRemove();
44
46
  }
45
- }, [handleRemove]);
47
+ }, [canRemove, handleRemove]);
46
48
  const humanFileSize = useMemo(() => {
47
49
  if (typeof size === 'number') {
48
50
  return getHumanSize(size);
@@ -95,20 +97,26 @@ const FileItem = ({
95
97
  const downloadText = t(textStrings.components.fileItem.download);
96
98
  const removeText = t(textStrings.components.fileItem.remove);
97
99
  const rightElement = useMemo(() => {
98
- if (!canDownload && !canRemove) return undefined;
99
- // Both actions available → show as ContextMenu
100
- if (canDownload && canRemove) {
101
- const items = [{
102
- icons: ['fa fa-download'],
103
- key: 'download',
104
- onClick: handleDownload,
105
- text: downloadText
106
- }, {
107
- icons: ['fa fa-trash'],
108
- key: 'remove',
109
- onClick: () => onRemove(id),
110
- text: removeText
111
- }];
100
+ if (!canDownload && !canRemove && !hasCustomActions) return undefined;
101
+ if (hasCustomActions || canDownload && canRemove) {
102
+ const items = [];
103
+ if (canDownload) {
104
+ items.push({
105
+ icons: ['fa fa-download'],
106
+ key: 'download',
107
+ onClick: handleDownload,
108
+ text: downloadText
109
+ });
110
+ }
111
+ if (canRemove) {
112
+ items.push({
113
+ icons: ['fa fa-trash'],
114
+ key: 'remove',
115
+ onClick: handleRemove,
116
+ text: removeText
117
+ });
118
+ }
119
+ items.push(...(contextMenuItems ?? []));
112
120
  return /*#__PURE__*/React.createElement(ContextMenu, {
113
121
  items: items
114
122
  });
@@ -131,7 +139,7 @@ const FileItem = ({
131
139
  }, /*#__PURE__*/React.createElement(Icon, {
132
140
  icons: [fileIcon]
133
141
  }));
134
- }, [canDownload, canRemove, downloadText, handleDownload, handleRemoveKeyDown, id, onRemove, removeText]);
142
+ }, [canDownload, canRemove, contextMenuItems, downloadText, handleDownload, handleRemove, handleRemoveKeyDown, hasCustomActions, id, onRemove, removeText]);
135
143
  return useMemo(() => /*#__PURE__*/React.createElement(StyledFileItem, null, /*#__PURE__*/React.createElement(StyledFileItemKeyboardWrapper, {
136
144
  onKeyDown: handleItemKeyDown,
137
145
  tabIndex: -1
@@ -1 +1 @@
1
- {"version":3,"file":"FileItem.js","names":["React","useCallback","useMemo","useRef","getHumanSize","getIconByMimeType","Icon","ContextMenu","ListItem","StyledFileItem","StyledFileItemKeyboardWrapper","StyledFileItemIcon","useTranslation","textStrings","useFocusRingPortal","useKeyboardFocusHighlighting","FileItem","mimeType","onRemove","size","name","id","source","shouldAllowDownload","canDownload","canRemove","actionIconRef","shouldShowKeyboardHighlighting","isEnabled","shape","handleRemove","handleItemKeyDown","event","key","preventDefault","handleRemoveKeyDown","stopPropagation","humanFileSize","undefined","icon","handleDownload","File","url","URL","createObjectURL","a","document","createElement","href","download","body","appendChild","click","removeChild","revokeObjectURL","fetch","then","res","ok","Error","blob","catch","rel","target","t","downloadText","components","fileItem","removeText","remove","rightElement","items","icons","onClick","text","handleClick","handleKeyDown","fileIcon","ref","onKeyDown","role","tabIndex","title","subtitle","rightElements","shouldEnableKeyboardHighlighting","displayName"],"sources":["../../../../../src/components/file-list/file-item/FileItem.tsx"],"sourcesContent":["import React, { FC, KeyboardEventHandler, useCallback, useMemo, useRef } from 'react';\nimport { getHumanSize, getIconByMimeType } from '../../../utils/file';\nimport Icon from '../../icon/Icon';\nimport ContextMenu from '../../context-menu/ContextMenu';\nimport type { ContextMenuItem } from '../../context-menu/ContextMenu.types';\nimport ListItem from '../../list/list-item/ListItem';\nimport type { IFileItem } from '../FileList';\nimport {\n StyledFileItem,\n StyledFileItemActions,\n StyledFileItemKeyboardWrapper,\n StyledFileItemRemoveButton,\n StyledFileItemIcon,\n} from './FileItem.styles';\nimport { useTranslation } from '@chayns/textstrings';\nimport textStrings from '../../../constants/textStrings';\nimport { useFocusRingPortal } from '../../../hooks/useFocusRingPortal';\nimport { useKeyboardFocusHighlighting } from '../../../hooks/useKeyboardFocusHighlighting';\n\nexport type FileItemProps = IFileItem & {\n onRemove?: (name: string) => void;\n shouldAllowDownload?: boolean;\n};\n\nconst FileItem: FC<FileItemProps> = ({\n mimeType,\n onRemove,\n size,\n name,\n id,\n source,\n shouldAllowDownload,\n}) => {\n const canDownload = shouldAllowDownload && !!source;\n const canRemove = typeof onRemove === 'function';\n const actionIconRef = useRef<HTMLDivElement>(null);\n\n const shouldShowKeyboardHighlighting = useKeyboardFocusHighlighting(canRemove || !!canDownload);\n useFocusRingPortal(actionIconRef, {\n isEnabled: shouldShowKeyboardHighlighting,\n shape: 'circle',\n });\n\n const handleRemove = useCallback(() => {\n if (canRemove) {\n onRemove(id);\n }\n }, [id, onRemove]);\n\n const handleItemKeyDown = useCallback<KeyboardEventHandler<HTMLDivElement>>(\n (event) => {\n if (event.key === 'Delete') {\n event.preventDefault();\n handleRemove();\n }\n },\n [handleRemove],\n );\n\n const handleRemoveKeyDown = useCallback<KeyboardEventHandler<HTMLSpanElement>>(\n (event) => {\n if (canRemove && (event.key === 'Enter' || event.key === ' ')) {\n event.preventDefault();\n event.stopPropagation();\n handleRemove();\n }\n },\n [handleRemove],\n );\n\n const humanFileSize = useMemo(() => {\n if (typeof size === 'number') {\n return getHumanSize(size);\n }\n\n return undefined;\n }, [size]);\n\n const icon = useMemo(() => getIconByMimeType(mimeType), [mimeType]);\n\n const handleDownload = useCallback(() => {\n if (!source) return;\n\n if (source instanceof File) {\n const url = URL.createObjectURL(source);\n const a = document.createElement('a');\n a.href = url;\n a.download = name;\n document.body.appendChild(a);\n a.click();\n document.body.removeChild(a);\n URL.revokeObjectURL(url);\n } else {\n // Try fetching as blob to force download. If CORS blocks it,\n // fall back to opening the URL directly.\n fetch(source)\n .then((res) => {\n if (!res.ok) throw new Error('fetch failed');\n return res.blob();\n })\n .then((blob) => {\n const url = URL.createObjectURL(blob);\n const a = document.createElement('a');\n a.href = url;\n a.download = name;\n document.body.appendChild(a);\n a.click();\n document.body.removeChild(a);\n URL.revokeObjectURL(url);\n })\n .catch(() => {\n // CORS or network error: fall back to direct link\n const a = document.createElement('a');\n a.href = source;\n a.download = name;\n a.rel = 'noopener noreferrer';\n a.target = '_blank';\n document.body.appendChild(a);\n a.click();\n document.body.removeChild(a);\n });\n }\n }, [name, source]);\n\n const { t } = useTranslation();\n const downloadText = t(textStrings.components.fileItem.download);\n const removeText = t(textStrings.components.fileItem.remove);\n\n const rightElement = useMemo(() => {\n if (!canDownload && !canRemove) return undefined;\n // Both actions available → show as ContextMenu\n if (canDownload && canRemove) {\n const items: ContextMenuItem[] = [\n {\n icons: ['fa fa-download'],\n key: 'download',\n onClick: handleDownload,\n text: downloadText,\n },\n {\n icons: ['fa fa-trash'],\n key: 'remove',\n onClick: () => onRemove(id),\n text: removeText,\n },\n ];\n\n return <ContextMenu items={items} />;\n }\n\n const handleClick = () => {\n if (canRemove) {\n onRemove(id);\n return;\n }\n\n handleDownload();\n };\n\n const handleKeyDown = canRemove ? handleRemoveKeyDown : undefined;\n\n const fileIcon = canRemove ? 'ts-wrong' : 'fa fa-download';\n\n return (\n <StyledFileItemIcon\n ref={actionIconRef}\n onClick={handleClick}\n onKeyDown={handleKeyDown}\n role=\"button\"\n tabIndex={0}\n >\n <Icon icons={[fileIcon]} />\n </StyledFileItemIcon>\n );\n }, [\n canDownload,\n canRemove,\n downloadText,\n handleDownload,\n handleRemoveKeyDown,\n id,\n onRemove,\n removeText,\n ]);\n\n return useMemo(\n () => (\n <StyledFileItem>\n <StyledFileItemKeyboardWrapper onKeyDown={handleItemKeyDown} tabIndex={-1}>\n <ListItem\n title={name}\n subtitle={humanFileSize}\n icons={[icon]}\n rightElements={rightElement}\n shouldEnableKeyboardHighlighting={shouldShowKeyboardHighlighting}\n />\n </StyledFileItemKeyboardWrapper>\n </StyledFileItem>\n ),\n [\n handleItemKeyDown,\n humanFileSize,\n icon,\n name,\n rightElement,\n shouldShowKeyboardHighlighting,\n ],\n );\n};\n\nFileItem.displayName = 'FileList';\n\nexport default FileItem;\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"FileItem.js","names":["React","useCallback","useMemo","useRef","getHumanSize","getIconByMimeType","Icon","ContextMenu","ListItem","StyledFileItem","StyledFileItemKeyboardWrapper","StyledFileItemIcon","useTranslation","textStrings","useFocusRingPortal","useKeyboardFocusHighlighting","FileItem","mimeType","onRemove","size","name","id","source","shouldAllowDownload","contextMenuItems","canDownload","canRemove","hasCustomActions","length","actionIconRef","shouldShowKeyboardHighlighting","isEnabled","shape","handleRemove","handleItemKeyDown","event","key","preventDefault","handleRemoveKeyDown","stopPropagation","humanFileSize","undefined","icon","handleDownload","File","url","URL","createObjectURL","a","document","createElement","href","download","body","appendChild","click","removeChild","revokeObjectURL","fetch","then","res","ok","Error","blob","catch","rel","target","t","downloadText","components","fileItem","removeText","remove","rightElement","items","push","icons","onClick","text","handleClick","handleKeyDown","fileIcon","ref","onKeyDown","role","tabIndex","title","subtitle","rightElements","shouldEnableKeyboardHighlighting","displayName"],"sources":["../../../../../src/components/file-list/file-item/FileItem.tsx"],"sourcesContent":["import React, { FC, KeyboardEventHandler, useCallback, useMemo, useRef } from 'react';\nimport { getHumanSize, getIconByMimeType } from '../../../utils/file';\nimport Icon from '../../icon/Icon';\nimport ContextMenu from '../../context-menu/ContextMenu';\nimport type { ContextMenuItem } from '../../context-menu/ContextMenu.types';\nimport ListItem from '../../list/list-item/ListItem';\nimport type { IFileItem } from '../FileList';\nimport {\n StyledFileItem,\n StyledFileItemKeyboardWrapper,\n StyledFileItemIcon,\n} from './FileItem.styles';\nimport { useTranslation } from '@chayns/textstrings';\nimport textStrings from '../../../constants/textStrings';\nimport { useFocusRingPortal } from '../../../hooks/useFocusRingPortal';\nimport { useKeyboardFocusHighlighting } from '../../../hooks/useKeyboardFocusHighlighting';\n\nexport type FileItemProps = IFileItem & {\n onRemove?: (name: string) => void;\n shouldAllowDownload?: boolean;\n};\n\nconst FileItem: FC<FileItemProps> = ({\n mimeType,\n onRemove,\n size,\n name,\n id,\n source,\n shouldAllowDownload,\n contextMenuItems,\n}) => {\n const canDownload = shouldAllowDownload && !!source;\n const canRemove = typeof onRemove === 'function';\n const hasCustomActions = !!contextMenuItems?.length;\n const actionIconRef = useRef<HTMLDivElement>(null);\n\n const shouldShowKeyboardHighlighting = useKeyboardFocusHighlighting(\n canRemove || !!canDownload || hasCustomActions,\n );\n useFocusRingPortal(actionIconRef, {\n isEnabled: shouldShowKeyboardHighlighting,\n shape: 'circle',\n });\n\n const handleRemove = useCallback(() => {\n if (canRemove) {\n onRemove(id);\n }\n }, [canRemove, id, onRemove]);\n\n const handleItemKeyDown = useCallback<KeyboardEventHandler<HTMLDivElement>>(\n (event) => {\n if (event.key === 'Delete') {\n event.preventDefault();\n handleRemove();\n }\n },\n [handleRemove],\n );\n\n const handleRemoveKeyDown = useCallback<KeyboardEventHandler<HTMLSpanElement>>(\n (event) => {\n if (canRemove && (event.key === 'Enter' || event.key === ' ')) {\n event.preventDefault();\n event.stopPropagation();\n handleRemove();\n }\n },\n [canRemove, handleRemove],\n );\n\n const humanFileSize = useMemo(() => {\n if (typeof size === 'number') {\n return getHumanSize(size);\n }\n\n return undefined;\n }, [size]);\n\n const icon = useMemo(() => getIconByMimeType(mimeType), [mimeType]);\n\n const handleDownload = useCallback(() => {\n if (!source) return;\n\n if (source instanceof File) {\n const url = URL.createObjectURL(source);\n const a = document.createElement('a');\n a.href = url;\n a.download = name;\n document.body.appendChild(a);\n a.click();\n document.body.removeChild(a);\n URL.revokeObjectURL(url);\n } else {\n // Try fetching as blob to force download. If CORS blocks it,\n // fall back to opening the URL directly.\n fetch(source)\n .then((res) => {\n if (!res.ok) throw new Error('fetch failed');\n return res.blob();\n })\n .then((blob) => {\n const url = URL.createObjectURL(blob);\n const a = document.createElement('a');\n a.href = url;\n a.download = name;\n document.body.appendChild(a);\n a.click();\n document.body.removeChild(a);\n URL.revokeObjectURL(url);\n })\n .catch(() => {\n // CORS or network error: fall back to direct link\n const a = document.createElement('a');\n a.href = source;\n a.download = name;\n a.rel = 'noopener noreferrer';\n a.target = '_blank';\n document.body.appendChild(a);\n a.click();\n document.body.removeChild(a);\n });\n }\n }, [name, source]);\n\n const { t } = useTranslation();\n const downloadText = t(textStrings.components.fileItem.download);\n const removeText = t(textStrings.components.fileItem.remove);\n\n const rightElement = useMemo(() => {\n if (!canDownload && !canRemove && !hasCustomActions) return undefined;\n\n if (hasCustomActions || (canDownload && canRemove)) {\n const items: ContextMenuItem[] = [];\n\n if (canDownload) {\n items.push({\n icons: ['fa fa-download'],\n key: 'download',\n onClick: handleDownload,\n text: downloadText,\n });\n }\n\n if (canRemove) {\n items.push({\n icons: ['fa fa-trash'],\n key: 'remove',\n onClick: handleRemove,\n text: removeText,\n });\n }\n\n items.push(...(contextMenuItems ?? []));\n\n return <ContextMenu items={items} />;\n }\n\n const handleClick = () => {\n if (canRemove) {\n onRemove(id);\n return;\n }\n\n handleDownload();\n };\n\n const handleKeyDown = canRemove ? handleRemoveKeyDown : undefined;\n\n const fileIcon = canRemove ? 'ts-wrong' : 'fa fa-download';\n\n return (\n <StyledFileItemIcon\n ref={actionIconRef}\n onClick={handleClick}\n onKeyDown={handleKeyDown}\n role=\"button\"\n tabIndex={0}\n >\n <Icon icons={[fileIcon]} />\n </StyledFileItemIcon>\n );\n }, [\n canDownload,\n canRemove,\n contextMenuItems,\n downloadText,\n handleDownload,\n handleRemove,\n handleRemoveKeyDown,\n hasCustomActions,\n id,\n onRemove,\n removeText,\n ]);\n\n return useMemo(\n () => (\n <StyledFileItem>\n <StyledFileItemKeyboardWrapper onKeyDown={handleItemKeyDown} tabIndex={-1}>\n <ListItem\n title={name}\n subtitle={humanFileSize}\n icons={[icon]}\n rightElements={rightElement}\n shouldEnableKeyboardHighlighting={shouldShowKeyboardHighlighting}\n />\n </StyledFileItemKeyboardWrapper>\n </StyledFileItem>\n ),\n [\n handleItemKeyDown,\n humanFileSize,\n icon,\n name,\n rightElement,\n shouldShowKeyboardHighlighting,\n ],\n );\n};\n\nFileItem.displayName = 'FileList';\n\nexport default FileItem;\n"],"mappings":"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","ignoreList":[]}
@@ -1,5 +1,6 @@
1
1
  import { c as _c } from "react-compiler-runtime";
2
2
  import React, { forwardRef, useCallback, useContext, useEffect, useImperativeHandle, useMemo, useRef, useState } from 'react';
3
+ import { useTheme } from 'styled-components';
3
4
  import { AreaContext } from '../area-provider/AreaContextProvider';
4
5
  import { StyledInputRightElement } from '../input/Input.styles';
5
6
  import { StyledRightElementWrapper, StyledTextArea, StyledTextAreaContent, StyledTextAreaContentWrapper, StyledTextAreaInput, StyledTextAreaLabel, StyledTextAreaLabelWrapper } from './TextArea.styles';
@@ -9,7 +10,7 @@ import { useKeyboardFocusHighlighting } from '../../hooks/useKeyboardFocusHighli
9
10
  const TextArea = /*#__PURE__*/forwardRef((t0, ref) => {
10
11
  "use memo";
11
12
 
12
- const $ = _c(31);
13
+ const $ = _c(32);
13
14
  const {
14
15
  isDisabled,
15
16
  isInvalid,
@@ -29,6 +30,7 @@ const TextArea = /*#__PURE__*/forwardRef((t0, ref) => {
29
30
  const minHeight = t2 === undefined ? "41px" : t2;
30
31
  const [isOverflowing, setIsOverflowing] = useState(false);
31
32
  const areaProvider = useContext(AreaContext);
33
+ const theme = useTheme();
32
34
  const textareaRef = useRef(null);
33
35
  useCursorRepaint(textareaRef);
34
36
  const shouldShowBorder = rightElement?.props?.style?.backgroundColor === undefined;
@@ -103,7 +105,7 @@ const TextArea = /*#__PURE__*/forwardRef((t0, ref) => {
103
105
  }
104
106
  const labelPosition = t8;
105
107
  let t9;
106
- if ($[11] !== colors?.backgroundColor || $[12] !== colors?.borderColor || $[13] !== hasValue || $[14] !== isDisabled || $[15] !== isInvalid || $[16] !== isOverflowing || $[17] !== labelPosition || $[18] !== maxHeight || $[19] !== minHeight || $[20] !== onBlur || $[21] !== onChange || $[22] !== onFocus || $[23] !== onKeyDown || $[24] !== placeholder || $[25] !== rightElement || $[26] !== shouldChangeColor || $[27] !== shouldShowBorder || $[28] !== shouldShowKeyboardHighlighting || $[29] !== value) {
108
+ if ($[11] !== colors?.backgroundColor || $[12] !== colors?.borderColor || $[13] !== hasValue || $[14] !== isDisabled || $[15] !== isInvalid || $[16] !== isOverflowing || $[17] !== labelPosition || $[18] !== maxHeight || $[19] !== minHeight || $[20] !== onBlur || $[21] !== onChange || $[22] !== onFocus || $[23] !== onKeyDown || $[24] !== placeholder || $[25] !== rightElement || $[26] !== shouldChangeColor || $[27] !== shouldShowBorder || $[28] !== shouldShowKeyboardHighlighting || $[29] !== theme.fontSize || $[30] !== value) {
107
109
  colors?.backgroundColor;
108
110
  colors?.borderColor;
109
111
  t9 = (() => /*#__PURE__*/React.createElement(StyledTextArea, {
@@ -130,7 +132,7 @@ const TextArea = /*#__PURE__*/forwardRef((t0, ref) => {
130
132
  rows: 1
131
133
  }), /*#__PURE__*/React.createElement(StyledTextAreaLabelWrapper, {
132
134
  animate: {
133
- fontSize: hasValue ? "9px" : undefined
135
+ fontSize: hasValue ? "9px" : `${Number(theme.fontSize)}px`
134
136
  },
135
137
  initial: false,
136
138
  style: labelPosition,
@@ -163,10 +165,11 @@ const TextArea = /*#__PURE__*/forwardRef((t0, ref) => {
163
165
  $[26] = shouldChangeColor;
164
166
  $[27] = shouldShowBorder;
165
167
  $[28] = shouldShowKeyboardHighlighting;
166
- $[29] = value;
167
- $[30] = t9;
168
+ $[29] = theme.fontSize;
169
+ $[30] = value;
170
+ $[31] = t9;
168
171
  } else {
169
- t9 = $[30];
172
+ t9 = $[31];
170
173
  }
171
174
  return t9;
172
175
  });
@@ -1 +1 @@
1
- {"version":3,"file":"TextArea.js","names":["React","forwardRef","useCallback","useContext","useEffect","useImperativeHandle","useMemo","useRef","useState","AreaContext","StyledInputRightElement","StyledRightElementWrapper","StyledTextArea","StyledTextAreaContent","StyledTextAreaContentWrapper","StyledTextAreaInput","StyledTextAreaLabel","StyledTextAreaLabelWrapper","useCursorRepaint","useFocusRingPortal","useKeyboardFocusHighlighting","TextArea","t0","ref","$","_c","isDisabled","isInvalid","placeholder","value","onChange","onFocus","onKeyDown","rightElement","onBlur","maxHeight","t1","minHeight","t2","colors","shouldEnableKeyboardHighlighting","undefined","isOverflowing","setIsOverflowing","areaProvider","textareaRef","shouldShowBorder","props","style","backgroundColor","shouldChangeColor","shouldShowKeyboardHighlighting","t3","isEnabled","t4","current","height","scrollHeight","parseInt","toString","adjustTextareaHeight","t5","Symbol","for","t6","t7","length","hasValue","t8","bottom","right","top","left","labelPosition","t9","borderColor","createElement","$backgroundColor","$borderColor","className","rows","animate","fontSize","initial","transition","type","duration","$isInline","displayName"],"sources":["../../../../src/components/text-area/TextArea.tsx"],"sourcesContent":["import React, {\n ChangeEventHandler,\n CSSProperties,\n FocusEventHandler,\n forwardRef,\n KeyboardEventHandler,\n ReactElement,\n useCallback,\n useContext,\n useEffect,\n useImperativeHandle,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport { AreaContext } from '../area-provider/AreaContextProvider';\nimport { StyledInputRightElement } from '../input/Input.styles';\nimport {\n StyledRightElementWrapper,\n StyledTextArea,\n StyledTextAreaContent,\n StyledTextAreaContentWrapper,\n StyledTextAreaInput,\n StyledTextAreaLabel,\n StyledTextAreaLabelWrapper,\n} from './TextArea.styles';\nimport { useCursorRepaint } from '../../hooks/resize';\nimport { useFocusRingPortal } from '../../hooks/useFocusRingPortal';\nimport { useKeyboardFocusHighlighting } from '../../hooks/useKeyboardFocusHighlighting';\n\ntype TextAreaColors = {\n backgroundColor: CSSProperties['backgroundColor'];\n borderColor: CSSProperties['borderColor'];\n};\n\nexport type TextAreaProps = {\n /**\n * Disables the text area so that it cannot be changed.\n */\n isDisabled?: boolean;\n /**\n * If true, the text area is marked as invalid\n */\n isInvalid?: boolean;\n /**\n * The maximum height of the text area.\n */\n maxHeight?: CSSProperties['maxHeight'];\n /**\n * The minimum height of the text area.\n */\n minHeight?: CSSProperties['minHeight'];\n /**\n * Function that is executed when the text area loses focus.\n */\n onBlur?: FocusEventHandler<HTMLTextAreaElement>;\n /**\n * Function that is executed when the text of the text area changes.\n */\n onChange?: ChangeEventHandler<HTMLTextAreaElement>;\n /**\n * Function that is executed when the input field is focused\n */\n onFocus?: FocusEventHandler<HTMLTextAreaElement>;\n /**\n * Function that is executed when a letter is pressed\n */\n onKeyDown?: KeyboardEventHandler<HTMLTextAreaElement>;\n /**\n * Placeholder for the text area field.\n */\n placeholder?: string | ReactElement;\n /**\n * An element that should be displayed on the right side of the Input.\n */\n rightElement?: ReactElement;\n /**\n * Value if the text area should be controlled.\n */\n value?: string;\n /**\n * Provide custom colors to the TextArea Component\n */\n colors?: TextAreaColors;\n /**\n * Enables keyboard-only focus highlighting.\n */\n shouldEnableKeyboardHighlighting?: boolean;\n};\n\nconst TextArea = forwardRef<HTMLTextAreaElement, TextAreaProps>(\n (\n {\n isDisabled,\n isInvalid,\n placeholder,\n value,\n onChange,\n onFocus,\n onKeyDown,\n rightElement,\n onBlur,\n maxHeight = '120px',\n minHeight = '41px',\n colors,\n shouldEnableKeyboardHighlighting,\n },\n ref,\n ) => {\n 'use memo';\n\n const [isOverflowing, setIsOverflowing] = useState(false);\n\n const areaProvider = useContext(AreaContext);\n\n const textareaRef = useRef<HTMLTextAreaElement>(null);\n\n useCursorRepaint(textareaRef);\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n const shouldShowBorder = rightElement?.props?.style?.backgroundColor === undefined;\n\n const shouldChangeColor = useMemo(\n () => areaProvider.shouldChangeColor ?? false,\n [areaProvider.shouldChangeColor],\n );\n\n const shouldShowKeyboardHighlighting = useKeyboardFocusHighlighting(\n shouldEnableKeyboardHighlighting && !isDisabled,\n );\n useFocusRingPortal(textareaRef, { isEnabled: shouldShowKeyboardHighlighting });\n\n const adjustTextareaHeight = useCallback(() => {\n if (textareaRef.current) {\n textareaRef.current.style.height = 'auto';\n textareaRef.current.style.height = `${textareaRef.current.scrollHeight}px`;\n\n setIsOverflowing(\n textareaRef.current.scrollHeight > parseInt(maxHeight.toString(), 10),\n );\n }\n }, [maxHeight]);\n\n useImperativeHandle(ref, () => textareaRef.current as HTMLTextAreaElement);\n\n /**\n * This hook calculates the height of the TextArea after the displayValue is changed and the content is inside the \"textareaRef\".\n * To maintain the functionality while clearing the input, the length need to be greater than -1.\n */\n useEffect(() => {\n if (typeof value === 'string' && value.length > -1) {\n adjustTextareaHeight();\n }\n }, [adjustTextareaHeight, value]);\n\n const hasValue = value !== undefined && value.length > 0;\n\n const labelPosition = useMemo(\n () =>\n hasValue\n ? {\n bottom: '2px',\n right: '2px',\n }\n : {\n top: '12px',\n left: '10px',\n },\n [hasValue],\n );\n\n return useMemo(\n () => (\n <StyledTextArea $isDisabled={isDisabled}>\n <StyledTextAreaContentWrapper\n $isInvalid={isInvalid}\n $shouldChangeColor={shouldChangeColor}\n $backgroundColor={colors?.backgroundColor}\n $borderColor={colors?.borderColor}\n data-should-show-keyboard-highlighting={shouldShowKeyboardHighlighting}\n >\n <StyledTextAreaContent>\n <StyledTextAreaInput\n className=\"chayns-scrollbar\"\n disabled={isDisabled}\n $isInvalid={isInvalid}\n ref={textareaRef}\n value={value}\n onBlur={onBlur}\n onChange={onChange}\n onFocus={onFocus}\n onKeyDown={onKeyDown}\n $maxHeight={maxHeight}\n $minHeight={minHeight}\n $isOverflowing={isOverflowing}\n rows={1}\n />\n <StyledTextAreaLabelWrapper\n animate={{ fontSize: hasValue ? '9px' : undefined }}\n initial={false}\n style={labelPosition}\n transition={{ type: 'tween', duration: 0.1 }}\n >\n <StyledTextAreaLabel $isInvalid={isInvalid}>\n {placeholder}\n </StyledTextAreaLabel>\n </StyledTextAreaLabelWrapper>\n </StyledTextAreaContent>\n {rightElement && shouldShowBorder && (\n <StyledInputRightElement $isInline>\n <StyledRightElementWrapper>\n {rightElement}\n </StyledRightElementWrapper>\n </StyledInputRightElement>\n )}\n </StyledTextAreaContentWrapper>\n {rightElement && !shouldShowBorder && (\n <StyledInputRightElement $isInline>\n <StyledRightElementWrapper>{rightElement}</StyledRightElementWrapper>\n </StyledInputRightElement>\n )}\n </StyledTextArea>\n ),\n [\n isDisabled,\n isInvalid,\n shouldChangeColor,\n shouldShowKeyboardHighlighting,\n colors?.backgroundColor,\n colors?.borderColor,\n value,\n onBlur,\n onChange,\n onFocus,\n onKeyDown,\n maxHeight,\n minHeight,\n isOverflowing,\n hasValue,\n labelPosition,\n placeholder,\n rightElement,\n shouldShowBorder,\n ],\n );\n },\n);\n\nTextArea.displayName = 'TextArea';\n\nexport default TextArea;\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"TextArea.js","names":["React","forwardRef","useCallback","useContext","useEffect","useImperativeHandle","useMemo","useRef","useState","useTheme","AreaContext","StyledInputRightElement","StyledRightElementWrapper","StyledTextArea","StyledTextAreaContent","StyledTextAreaContentWrapper","StyledTextAreaInput","StyledTextAreaLabel","StyledTextAreaLabelWrapper","useCursorRepaint","useFocusRingPortal","useKeyboardFocusHighlighting","TextArea","t0","ref","$","_c","isDisabled","isInvalid","placeholder","value","onChange","onFocus","onKeyDown","rightElement","onBlur","maxHeight","t1","minHeight","t2","colors","shouldEnableKeyboardHighlighting","undefined","isOverflowing","setIsOverflowing","areaProvider","theme","textareaRef","shouldShowBorder","props","style","backgroundColor","shouldChangeColor","shouldShowKeyboardHighlighting","t3","isEnabled","t4","current","height","scrollHeight","parseInt","toString","adjustTextareaHeight","t5","Symbol","for","t6","t7","length","hasValue","t8","bottom","right","top","left","labelPosition","t9","borderColor","fontSize","createElement","$backgroundColor","$borderColor","className","rows","animate","Number","initial","transition","type","duration","$isInline","displayName"],"sources":["../../../../src/components/text-area/TextArea.tsx"],"sourcesContent":["import React, {\n ChangeEventHandler,\n CSSProperties,\n FocusEventHandler,\n forwardRef,\n KeyboardEventHandler,\n ReactElement,\n useCallback,\n useContext,\n useEffect,\n useImperativeHandle,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport { useTheme } from 'styled-components';\nimport { AreaContext } from '../area-provider/AreaContextProvider';\nimport type { Theme } from '../color-scheme-provider/ColorSchemeProvider';\nimport { StyledInputRightElement } from '../input/Input.styles';\nimport {\n StyledRightElementWrapper,\n StyledTextArea,\n StyledTextAreaContent,\n StyledTextAreaContentWrapper,\n StyledTextAreaInput,\n StyledTextAreaLabel,\n StyledTextAreaLabelWrapper,\n} from './TextArea.styles';\nimport { useCursorRepaint } from '../../hooks/resize';\nimport { useFocusRingPortal } from '../../hooks/useFocusRingPortal';\nimport { useKeyboardFocusHighlighting } from '../../hooks/useKeyboardFocusHighlighting';\n\ntype TextAreaColors = {\n backgroundColor: CSSProperties['backgroundColor'];\n borderColor: CSSProperties['borderColor'];\n};\n\nexport type TextAreaProps = {\n /**\n * Disables the text area so that it cannot be changed.\n */\n isDisabled?: boolean;\n /**\n * If true, the text area is marked as invalid\n */\n isInvalid?: boolean;\n /**\n * The maximum height of the text area.\n */\n maxHeight?: CSSProperties['maxHeight'];\n /**\n * The minimum height of the text area.\n */\n minHeight?: CSSProperties['minHeight'];\n /**\n * Function that is executed when the text area loses focus.\n */\n onBlur?: FocusEventHandler<HTMLTextAreaElement>;\n /**\n * Function that is executed when the text of the text area changes.\n */\n onChange?: ChangeEventHandler<HTMLTextAreaElement>;\n /**\n * Function that is executed when the input field is focused\n */\n onFocus?: FocusEventHandler<HTMLTextAreaElement>;\n /**\n * Function that is executed when a letter is pressed\n */\n onKeyDown?: KeyboardEventHandler<HTMLTextAreaElement>;\n /**\n * Placeholder for the text area field.\n */\n placeholder?: string | ReactElement;\n /**\n * An element that should be displayed on the right side of the Input.\n */\n rightElement?: ReactElement;\n /**\n * Value if the text area should be controlled.\n */\n value?: string;\n /**\n * Provide custom colors to the TextArea Component\n */\n colors?: TextAreaColors;\n /**\n * Enables keyboard-only focus highlighting.\n */\n shouldEnableKeyboardHighlighting?: boolean;\n};\n\nconst TextArea = forwardRef<HTMLTextAreaElement, TextAreaProps>(\n (\n {\n isDisabled,\n isInvalid,\n placeholder,\n value,\n onChange,\n onFocus,\n onKeyDown,\n rightElement,\n onBlur,\n maxHeight = '120px',\n minHeight = '41px',\n colors,\n shouldEnableKeyboardHighlighting,\n },\n ref,\n ) => {\n 'use memo';\n\n const [isOverflowing, setIsOverflowing] = useState(false);\n\n const areaProvider = useContext(AreaContext);\n const theme = useTheme() as Theme;\n\n const textareaRef = useRef<HTMLTextAreaElement>(null);\n\n useCursorRepaint(textareaRef);\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n const shouldShowBorder = rightElement?.props?.style?.backgroundColor === undefined;\n\n const shouldChangeColor = useMemo(\n () => areaProvider.shouldChangeColor ?? false,\n [areaProvider.shouldChangeColor],\n );\n\n const shouldShowKeyboardHighlighting = useKeyboardFocusHighlighting(\n shouldEnableKeyboardHighlighting && !isDisabled,\n );\n useFocusRingPortal(textareaRef, { isEnabled: shouldShowKeyboardHighlighting });\n\n const adjustTextareaHeight = useCallback(() => {\n if (textareaRef.current) {\n textareaRef.current.style.height = 'auto';\n textareaRef.current.style.height = `${textareaRef.current.scrollHeight}px`;\n\n setIsOverflowing(\n textareaRef.current.scrollHeight > parseInt(maxHeight.toString(), 10),\n );\n }\n }, [maxHeight]);\n\n useImperativeHandle(ref, () => textareaRef.current as HTMLTextAreaElement);\n\n /**\n * This hook calculates the height of the TextArea after the displayValue is changed and the content is inside the \"textareaRef\".\n * To maintain the functionality while clearing the input, the length need to be greater than -1.\n */\n useEffect(() => {\n if (typeof value === 'string' && value.length > -1) {\n adjustTextareaHeight();\n }\n }, [adjustTextareaHeight, value]);\n\n const hasValue = value !== undefined && value.length > 0;\n\n const labelPosition = useMemo(\n () =>\n hasValue\n ? {\n bottom: '2px',\n right: '2px',\n }\n : {\n top: '12px',\n left: '10px',\n },\n [hasValue],\n );\n\n return useMemo(\n () => (\n <StyledTextArea $isDisabled={isDisabled}>\n <StyledTextAreaContentWrapper\n $isInvalid={isInvalid}\n $shouldChangeColor={shouldChangeColor}\n $backgroundColor={colors?.backgroundColor}\n $borderColor={colors?.borderColor}\n data-should-show-keyboard-highlighting={shouldShowKeyboardHighlighting}\n >\n <StyledTextAreaContent>\n <StyledTextAreaInput\n className=\"chayns-scrollbar\"\n disabled={isDisabled}\n $isInvalid={isInvalid}\n ref={textareaRef}\n value={value}\n onBlur={onBlur}\n onChange={onChange}\n onFocus={onFocus}\n onKeyDown={onKeyDown}\n $maxHeight={maxHeight}\n $minHeight={minHeight}\n $isOverflowing={isOverflowing}\n rows={1}\n />\n <StyledTextAreaLabelWrapper\n animate={{\n fontSize: hasValue ? '9px' : `${Number(theme.fontSize)}px`,\n }}\n initial={false}\n style={labelPosition}\n transition={{ type: 'tween', duration: 0.1 }}\n >\n <StyledTextAreaLabel $isInvalid={isInvalid}>\n {placeholder}\n </StyledTextAreaLabel>\n </StyledTextAreaLabelWrapper>\n </StyledTextAreaContent>\n {rightElement && shouldShowBorder && (\n <StyledInputRightElement $isInline>\n <StyledRightElementWrapper>\n {rightElement}\n </StyledRightElementWrapper>\n </StyledInputRightElement>\n )}\n </StyledTextAreaContentWrapper>\n {rightElement && !shouldShowBorder && (\n <StyledInputRightElement $isInline>\n <StyledRightElementWrapper>{rightElement}</StyledRightElementWrapper>\n </StyledInputRightElement>\n )}\n </StyledTextArea>\n ),\n [\n isDisabled,\n isInvalid,\n shouldChangeColor,\n shouldShowKeyboardHighlighting,\n colors?.backgroundColor,\n colors?.borderColor,\n value,\n onBlur,\n onChange,\n onFocus,\n onKeyDown,\n maxHeight,\n minHeight,\n isOverflowing,\n hasValue,\n theme.fontSize,\n labelPosition,\n placeholder,\n rightElement,\n shouldShowBorder,\n ],\n );\n },\n);\n\nTextArea.displayName = 'TextArea';\n\nexport default TextArea;\n"],"mappings":"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","ignoreList":[]}
@@ -1,10 +1,16 @@
1
1
  import { FC } from 'react';
2
+ import type { ContextMenuItem } from '../context-menu/ContextMenu.types';
2
3
  export interface IFileItem {
3
4
  id: string;
4
5
  name: string;
5
6
  size?: number;
6
7
  mimeType: string;
7
8
  source?: string | File;
9
+ /**
10
+ * Additional context menu actions, appended after the built-in download and remove actions.
11
+ * Use keys other than `download` and `remove` when those built-in actions are enabled.
12
+ */
13
+ contextMenuItems?: ContextMenuItem[];
8
14
  }
9
15
  export type FileListProps = {
10
16
  /**
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@chayns-components/core",
3
- "version": "5.5.62",
3
+ "version": "5.5.64",
4
4
  "description": "A set of beautiful React components for developing your own applications with chayns.",
5
5
  "sideEffects": false,
6
6
  "browserslist": [
@@ -93,5 +93,5 @@
93
93
  "publishConfig": {
94
94
  "access": "public"
95
95
  },
96
- "gitHead": "f6abf3dafcf964c234dd21babdd5a26ff07e87eb"
96
+ "gitHead": "dc5770e8b729b767a988f81ac5174408d31e425d"
97
97
  }