@skbkontur/react-ui 4.6.0 → 4.7.0

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 (155) hide show
  1. package/CHANGELOG.md +36 -0
  2. package/cjs/components/ComboBox/ComboBox.d.ts +15 -0
  3. package/cjs/components/ComboBox/ComboBox.js +16 -0
  4. package/cjs/components/ComboBox/ComboBox.js.map +1 -1
  5. package/cjs/components/ComboBox/ComboBox.md +10 -1
  6. package/cjs/components/DropdownMenu/DropdownMenu.md +11 -9
  7. package/cjs/components/FileUploader/FileUploader.d.ts +9 -1
  8. package/cjs/components/FileUploader/FileUploader.js +67 -18
  9. package/cjs/components/FileUploader/FileUploader.js.map +1 -1
  10. package/cjs/components/FileUploader/FileUploader.mixins.d.ts +1 -0
  11. package/cjs/components/FileUploader/FileUploader.mixins.js +10 -0
  12. package/cjs/components/FileUploader/FileUploader.mixins.js.map +1 -0
  13. package/cjs/components/FileUploader/FileUploader.styles.d.ts +12 -1
  14. package/cjs/components/FileUploader/FileUploader.styles.js +119 -22
  15. package/cjs/components/FileUploader/FileUploader.styles.js.map +1 -1
  16. package/cjs/components/Hint/Hint.d.ts +1 -0
  17. package/cjs/components/Hint/Hint.js +6 -2
  18. package/cjs/components/Hint/Hint.js.map +1 -1
  19. package/cjs/components/Paging/Paging.js +20 -15
  20. package/cjs/components/Paging/Paging.js.map +1 -1
  21. package/cjs/components/Paging/Paging.md +13 -0
  22. package/cjs/components/Paging/Paging.styles.d.ts +6 -2
  23. package/cjs/components/Paging/Paging.styles.js +40 -15
  24. package/cjs/components/Paging/Paging.styles.js.map +1 -1
  25. package/cjs/components/Select/Select.js +5 -3
  26. package/cjs/components/Select/Select.js.map +1 -1
  27. package/cjs/components/SidePage/SidePage.d.ts +0 -1
  28. package/cjs/components/SidePage/SidePage.js +0 -2
  29. package/cjs/components/SidePage/SidePage.js.map +1 -1
  30. package/cjs/components/SidePage/SidePageBody.d.ts +0 -1
  31. package/cjs/components/SidePage/SidePageBody.js +6 -11
  32. package/cjs/components/SidePage/SidePageBody.js.map +1 -1
  33. package/cjs/components/Toggle/Toggle.js +2 -1
  34. package/cjs/components/Toggle/Toggle.js.map +1 -1
  35. package/cjs/internal/CustomComboBox/ComboBoxMenu.d.ts +1 -0
  36. package/cjs/internal/CustomComboBox/ComboBoxMenu.js +3 -1
  37. package/cjs/internal/CustomComboBox/ComboBoxMenu.js.map +1 -1
  38. package/cjs/internal/CustomComboBox/ComboBoxView.d.ts +1 -0
  39. package/cjs/internal/CustomComboBox/ComboBoxView.js +3 -1
  40. package/cjs/internal/CustomComboBox/ComboBoxView.js.map +1 -1
  41. package/cjs/internal/CustomComboBox/CustomComboBox.d.ts +1 -0
  42. package/cjs/internal/CustomComboBox/CustomComboBox.js +3 -1
  43. package/cjs/internal/CustomComboBox/CustomComboBox.js.map +1 -1
  44. package/cjs/internal/CustomComboBox/CustomComboBoxReducer.js +4 -1
  45. package/cjs/internal/CustomComboBox/CustomComboBoxReducer.js.map +1 -1
  46. package/cjs/internal/FileUploaderControl/FileUploaderControlContext.d.ts +2 -0
  47. package/cjs/internal/FileUploaderControl/FileUploaderControlContext.js +2 -0
  48. package/cjs/internal/FileUploaderControl/FileUploaderControlContext.js.map +1 -1
  49. package/cjs/internal/FileUploaderControl/FileUploaderControlProvider.js +4 -1
  50. package/cjs/internal/FileUploaderControl/FileUploaderControlProvider.js.map +1 -1
  51. package/cjs/internal/FileUploaderControl/FileUploaderFile/FileUploaderFile.d.ts +3 -0
  52. package/cjs/internal/FileUploaderControl/FileUploaderFile/FileUploaderFile.js +46 -11
  53. package/cjs/internal/FileUploaderControl/FileUploaderFile/FileUploaderFile.js.map +1 -1
  54. package/cjs/internal/FileUploaderControl/FileUploaderFile/FileUploaderFile.styles.d.ts +7 -0
  55. package/cjs/internal/FileUploaderControl/FileUploaderFile/FileUploaderFile.styles.js +54 -7
  56. package/cjs/internal/FileUploaderControl/FileUploaderFile/FileUploaderFile.styles.js.map +1 -1
  57. package/cjs/internal/FileUploaderControl/FileUploaderFileList/FileUploaderFileList.d.ts +2 -0
  58. package/cjs/internal/FileUploaderControl/FileUploaderFileList/FileUploaderFileList.js +15 -3
  59. package/cjs/internal/FileUploaderControl/FileUploaderFileList/FileUploaderFileList.js.map +1 -1
  60. package/cjs/internal/FileUploaderControl/FileUploaderFileList/FileUploaderFileList.styles.d.ts +3 -0
  61. package/cjs/internal/FileUploaderControl/FileUploaderFileList/FileUploaderFileList.styles.js +19 -1
  62. package/cjs/internal/FileUploaderControl/FileUploaderFileList/FileUploaderFileList.styles.js.map +1 -1
  63. package/cjs/internal/FileUploaderControl/hooks/useFileUploaderSize.d.ts +2 -0
  64. package/cjs/internal/FileUploaderControl/hooks/useFileUploaderSize.js +18 -0
  65. package/cjs/internal/FileUploaderControl/hooks/useFileUploaderSize.js.map +1 -0
  66. package/cjs/internal/Popup/Popup.d.ts +5 -0
  67. package/cjs/internal/Popup/Popup.js +10 -2
  68. package/cjs/internal/Popup/Popup.js.map +1 -1
  69. package/cjs/internal/ThemeShowcase/VariablesCollector.d.ts +1 -1
  70. package/cjs/internal/themes/DarkTheme.d.ts +1 -0
  71. package/cjs/internal/themes/DarkTheme.js +2 -1
  72. package/cjs/internal/themes/DarkTheme.js.map +1 -1
  73. package/cjs/internal/themes/DefaultTheme.d.ts +16 -0
  74. package/cjs/internal/themes/DefaultTheme.js +41 -1
  75. package/cjs/internal/themes/DefaultTheme.js.map +1 -1
  76. package/cjs/lib/utils.d.ts +2 -3
  77. package/cjs/lib/utils.js +1 -2
  78. package/cjs/lib/utils.js.map +1 -1
  79. package/components/ComboBox/ComboBox/ComboBox.js.map +1 -1
  80. package/components/ComboBox/ComboBox.d.ts +15 -0
  81. package/components/ComboBox/ComboBox.md +10 -1
  82. package/components/DropdownMenu/DropdownMenu.md +11 -9
  83. package/components/FileUploader/FileUploader/FileUploader.js +56 -20
  84. package/components/FileUploader/FileUploader/FileUploader.js.map +1 -1
  85. package/components/FileUploader/FileUploader.d.ts +9 -1
  86. package/components/FileUploader/FileUploader.mixins/FileUploader.mixins.js +8 -0
  87. package/components/FileUploader/FileUploader.mixins/FileUploader.mixins.js.map +1 -0
  88. package/components/FileUploader/FileUploader.mixins/package.json +6 -0
  89. package/components/FileUploader/FileUploader.mixins.d.ts +1 -0
  90. package/components/FileUploader/FileUploader.styles/FileUploader.styles.js +51 -17
  91. package/components/FileUploader/FileUploader.styles/FileUploader.styles.js.map +1 -1
  92. package/components/FileUploader/FileUploader.styles.d.ts +12 -1
  93. package/components/Hint/Hint/Hint.js +13 -5
  94. package/components/Hint/Hint/Hint.js.map +1 -1
  95. package/components/Hint/Hint.d.ts +1 -0
  96. package/components/Paging/Paging/Paging.js +12 -9
  97. package/components/Paging/Paging/Paging.js.map +1 -1
  98. package/components/Paging/Paging.md +13 -0
  99. package/components/Paging/Paging.styles/Paging.styles.js +27 -15
  100. package/components/Paging/Paging.styles/Paging.styles.js.map +1 -1
  101. package/components/Paging/Paging.styles.d.ts +6 -2
  102. package/components/Select/Select/Select.js +5 -5
  103. package/components/Select/Select/Select.js.map +1 -1
  104. package/components/SidePage/SidePage/SidePage.js +0 -1
  105. package/components/SidePage/SidePage/SidePage.js.map +1 -1
  106. package/components/SidePage/SidePage.d.ts +0 -1
  107. package/components/SidePage/SidePageBody/SidePageBody.js +1 -9
  108. package/components/SidePage/SidePageBody/SidePageBody.js.map +1 -1
  109. package/components/SidePage/SidePageBody.d.ts +0 -1
  110. package/components/Toggle/Toggle/Toggle.js +2 -1
  111. package/components/Toggle/Toggle/Toggle.js.map +1 -1
  112. package/internal/CustomComboBox/ComboBoxMenu/ComboBoxMenu.js +3 -1
  113. package/internal/CustomComboBox/ComboBoxMenu/ComboBoxMenu.js.map +1 -1
  114. package/internal/CustomComboBox/ComboBoxMenu.d.ts +1 -0
  115. package/internal/CustomComboBox/ComboBoxView/ComboBoxView.js +3 -1
  116. package/internal/CustomComboBox/ComboBoxView/ComboBoxView.js.map +1 -1
  117. package/internal/CustomComboBox/ComboBoxView.d.ts +1 -0
  118. package/internal/CustomComboBox/CustomComboBox/CustomComboBox.js +1 -0
  119. package/internal/CustomComboBox/CustomComboBox/CustomComboBox.js.map +1 -1
  120. package/internal/CustomComboBox/CustomComboBox.d.ts +1 -0
  121. package/internal/CustomComboBox/CustomComboBoxReducer/CustomComboBoxReducer.js +5 -1
  122. package/internal/CustomComboBox/CustomComboBoxReducer/CustomComboBoxReducer.js.map +1 -1
  123. package/internal/FileUploaderControl/FileUploaderControlContext/FileUploaderControlContext.js.map +1 -1
  124. package/internal/FileUploaderControl/FileUploaderControlContext.d.ts +2 -0
  125. package/internal/FileUploaderControl/FileUploaderControlProvider/FileUploaderControlProvider.js +7 -1
  126. package/internal/FileUploaderControl/FileUploaderControlProvider/FileUploaderControlProvider.js.map +1 -1
  127. package/internal/FileUploaderControl/FileUploaderFile/FileUploaderFile/FileUploaderFile.js +38 -13
  128. package/internal/FileUploaderControl/FileUploaderFile/FileUploaderFile/FileUploaderFile.js.map +1 -1
  129. package/internal/FileUploaderControl/FileUploaderFile/FileUploaderFile.d.ts +3 -0
  130. package/internal/FileUploaderControl/FileUploaderFile/FileUploaderFile.styles/FileUploaderFile.styles.js +26 -5
  131. package/internal/FileUploaderControl/FileUploaderFile/FileUploaderFile.styles/FileUploaderFile.styles.js.map +1 -1
  132. package/internal/FileUploaderControl/FileUploaderFile/FileUploaderFile.styles.d.ts +7 -0
  133. package/internal/FileUploaderControl/FileUploaderFileList/FileUploaderFileList/FileUploaderFileList.js +13 -3
  134. package/internal/FileUploaderControl/FileUploaderFileList/FileUploaderFileList/FileUploaderFileList.js.map +1 -1
  135. package/internal/FileUploaderControl/FileUploaderFileList/FileUploaderFileList.d.ts +2 -0
  136. package/internal/FileUploaderControl/FileUploaderFileList/FileUploaderFileList.styles/FileUploaderFileList.styles.js +10 -1
  137. package/internal/FileUploaderControl/FileUploaderFileList/FileUploaderFileList.styles/FileUploaderFileList.styles.js.map +1 -1
  138. package/internal/FileUploaderControl/FileUploaderFileList/FileUploaderFileList.styles.d.ts +3 -0
  139. package/internal/FileUploaderControl/hooks/useFileUploaderSize/package.json +6 -0
  140. package/internal/FileUploaderControl/hooks/useFileUploaderSize/useFileUploaderSize.js +21 -0
  141. package/internal/FileUploaderControl/hooks/useFileUploaderSize/useFileUploaderSize.js.map +1 -0
  142. package/internal/FileUploaderControl/hooks/useFileUploaderSize.d.ts +2 -0
  143. package/internal/Popup/Popup/Popup.js +5 -1
  144. package/internal/Popup/Popup/Popup.js.map +1 -1
  145. package/internal/Popup/Popup.d.ts +5 -0
  146. package/internal/ThemeShowcase/VariablesCollector.d.ts +1 -1
  147. package/internal/themes/DarkTheme/DarkTheme.js +1 -0
  148. package/internal/themes/DarkTheme/DarkTheme.js.map +1 -1
  149. package/internal/themes/DarkTheme.d.ts +1 -0
  150. package/internal/themes/DefaultTheme/DefaultTheme.js +64 -0
  151. package/internal/themes/DefaultTheme/DefaultTheme.js.map +1 -1
  152. package/internal/themes/DefaultTheme.d.ts +16 -0
  153. package/lib/utils/utils.js.map +1 -1
  154. package/lib/utils.d.ts +2 -3
  155. package/package.json +2 -2
@@ -33,6 +33,10 @@ export var FileUploaderControlProvider = function FileUploaderControlProvider(pr
33
33
  files = _useState[0],
34
34
  setFiles = _useState[1];
35
35
 
36
+ var _useState2 = useState(false),
37
+ isMinLengthReached = _useState2[0],
38
+ setIsMinLengthReached = _useState2[1];
39
+
36
40
  var locale = useControlLocale();
37
41
  useEffectWithoutInitCall(function () {
38
42
  onValueChange == null ? void 0 : onValueChange(files);
@@ -82,7 +86,9 @@ export var FileUploaderControlProvider = function FileUploaderControlProvider(pr
82
86
  setFiles: handleExternalSetFiles,
83
87
  removeFile: removeFile,
84
88
  setFileValidationResult: setFileValidationResult,
85
- reset: reset
89
+ reset: reset,
90
+ isMinLengthReached: isMinLengthReached,
91
+ setIsMinLengthReached: setIsMinLengthReached
86
92
  })
87
93
  }, children);
88
94
  };
@@ -1 +1 @@
1
- {"version":3,"sources":["FileUploaderControlProvider.tsx"],"names":["React","useCallback","useState","useMemoObject","useEffectWithoutInitCall","FileUploaderFileStatus","FileUploaderControlContext","useControlLocale","FileUploaderFileValidationResult","updateFile","files","fileId","getFileUpdatedProps","fileIndex","findIndex","file","id","newFiles","updatedProps","FileUploaderControlProvider","props","children","onValueChange","onRemove","onAttach","setFiles","locale","setFileStatus","status","validationResult","Error","error","requestErrorText","handleExternalSetFiles","state","removeFile","filter","setFileValidationResult","reset","displayName"],"mappings":"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","sourcesContent":["import React, { PropsWithChildren, useCallback, useState } from 'react';\n\nimport { useMemoObject } from '../../hooks/useMemoObject';\nimport { useEffectWithoutInitCall } from '../../hooks/useEffectWithoutInitCall';\n\nimport { FileUploaderAttachedFile, FileUploaderFileStatus } from './fileUtils';\nimport { FileUploaderControlContext } from './FileUploaderControlContext';\nimport { useControlLocale } from './hooks/useControlLocale';\nimport { FileUploaderFileValidationResult } from './FileUploaderFileValidationResult';\n\nexport interface FileUploaderControlProviderProps {\n /** Срабатывает при выборе файлов */\n onAttach?: (files: FileUploaderAttachedFile[]) => void;\n /** Срабатывает при удалении файла из контрола */\n onRemove?: (fileId: string) => void;\n /** Срабатывает при onAttach, onRemove и других изменениях файлов. В files передает текущее состояние всего списка файлов */\n onValueChange?: (files: FileUploaderAttachedFile[]) => void;\n}\n\nconst updateFile = (\n files: FileUploaderAttachedFile[],\n fileId: string,\n getFileUpdatedProps: (file: FileUploaderAttachedFile) => Partial<FileUploaderAttachedFile>,\n): FileUploaderAttachedFile[] => {\n const fileIndex = files.findIndex((file) => file.id === fileId);\n if (fileIndex === -1) {\n return files;\n }\n\n const newFiles = [...files];\n const file = files[fileIndex];\n\n const updatedProps = getFileUpdatedProps(file);\n\n newFiles[fileIndex] = {\n ...file,\n ...updatedProps,\n };\n\n return newFiles;\n};\n\nexport const FileUploaderControlProvider = (props: PropsWithChildren<FileUploaderControlProviderProps>) => {\n const { children, onValueChange, onRemove, onAttach } = props;\n\n const [files, setFiles] = useState<FileUploaderAttachedFile[]>([]);\n const locale = useControlLocale();\n\n useEffectWithoutInitCall(() => {\n onValueChange?.(files);\n }, [files]);\n\n const setFileStatus = useCallback(\n (fileId: string, status: FileUploaderFileStatus) => {\n setFiles((files) =>\n updateFile(files, fileId, (file) => ({\n status,\n validationResult:\n status === FileUploaderFileStatus.Error\n ? FileUploaderFileValidationResult.error(locale.requestErrorText)\n : file.validationResult,\n })),\n );\n },\n [locale],\n );\n\n const handleExternalSetFiles = useCallback(\n (files: FileUploaderAttachedFile[]) => {\n onAttach?.(files);\n setFiles((state) => [...state, ...files]);\n },\n [onAttach],\n );\n\n const removeFile = useCallback(\n (fileId: string) => {\n onRemove?.(fileId);\n setFiles((state) => state.filter((file) => file.id !== fileId));\n },\n [onRemove],\n );\n\n const setFileValidationResult = useCallback((fileId: string, validationResult: FileUploaderFileValidationResult) => {\n setFiles((files) => updateFile(files, fileId, () => ({ validationResult })));\n }, []);\n\n const reset = React.useCallback(() => {\n setFiles(() => [] as FileUploaderAttachedFile[]);\n }, []);\n\n return (\n <FileUploaderControlContext.Provider\n value={useMemoObject({\n setFileStatus,\n files,\n setFiles: handleExternalSetFiles,\n removeFile,\n setFileValidationResult,\n reset,\n })}\n >\n {children}\n </FileUploaderControlContext.Provider>\n );\n};\n\nFileUploaderControlProvider.displayName = 'FileUploaderControlProvider';\n"]}
1
+ {"version":3,"sources":["FileUploaderControlProvider.tsx"],"names":["React","useCallback","useState","useMemoObject","useEffectWithoutInitCall","FileUploaderFileStatus","FileUploaderControlContext","useControlLocale","FileUploaderFileValidationResult","updateFile","files","fileId","getFileUpdatedProps","fileIndex","findIndex","file","id","newFiles","updatedProps","FileUploaderControlProvider","props","children","onValueChange","onRemove","onAttach","setFiles","isMinLengthReached","setIsMinLengthReached","locale","setFileStatus","status","validationResult","Error","error","requestErrorText","handleExternalSetFiles","state","removeFile","filter","setFileValidationResult","reset","displayName"],"mappings":"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","sourcesContent":["import React, { PropsWithChildren, useCallback, useState } from 'react';\n\nimport { useMemoObject } from '../../hooks/useMemoObject';\nimport { useEffectWithoutInitCall } from '../../hooks/useEffectWithoutInitCall';\n\nimport { FileUploaderAttachedFile, FileUploaderFileStatus } from './fileUtils';\nimport { FileUploaderControlContext } from './FileUploaderControlContext';\nimport { useControlLocale } from './hooks/useControlLocale';\nimport { FileUploaderFileValidationResult } from './FileUploaderFileValidationResult';\n\nexport interface FileUploaderControlProviderProps {\n /** Срабатывает при выборе файлов */\n onAttach?: (files: FileUploaderAttachedFile[]) => void;\n /** Срабатывает при удалении файла из контрола */\n onRemove?: (fileId: string) => void;\n /** Срабатывает при onAttach, onRemove и других изменениях файлов. В files передает текущее состояние всего списка файлов */\n onValueChange?: (files: FileUploaderAttachedFile[]) => void;\n}\n\nconst updateFile = (\n files: FileUploaderAttachedFile[],\n fileId: string,\n getFileUpdatedProps: (file: FileUploaderAttachedFile) => Partial<FileUploaderAttachedFile>,\n): FileUploaderAttachedFile[] => {\n const fileIndex = files.findIndex((file) => file.id === fileId);\n if (fileIndex === -1) {\n return files;\n }\n\n const newFiles = [...files];\n const file = files[fileIndex];\n\n const updatedProps = getFileUpdatedProps(file);\n\n newFiles[fileIndex] = {\n ...file,\n ...updatedProps,\n };\n\n return newFiles;\n};\n\nexport const FileUploaderControlProvider = (props: PropsWithChildren<FileUploaderControlProviderProps>) => {\n const { children, onValueChange, onRemove, onAttach } = props;\n\n const [files, setFiles] = useState<FileUploaderAttachedFile[]>([]);\n const [isMinLengthReached, setIsMinLengthReached] = useState<boolean>(false);\n const locale = useControlLocale();\n\n useEffectWithoutInitCall(() => {\n onValueChange?.(files);\n }, [files]);\n\n const setFileStatus = useCallback(\n (fileId: string, status: FileUploaderFileStatus) => {\n setFiles((files) =>\n updateFile(files, fileId, (file) => ({\n status,\n validationResult:\n status === FileUploaderFileStatus.Error\n ? FileUploaderFileValidationResult.error(locale.requestErrorText)\n : file.validationResult,\n })),\n );\n },\n [locale],\n );\n\n const handleExternalSetFiles = useCallback(\n (files: FileUploaderAttachedFile[]) => {\n onAttach?.(files);\n setFiles((state) => [...state, ...files]);\n },\n [onAttach],\n );\n\n const removeFile = useCallback(\n (fileId: string) => {\n onRemove?.(fileId);\n setFiles((state) => state.filter((file) => file.id !== fileId));\n },\n [onRemove],\n );\n\n const setFileValidationResult = useCallback((fileId: string, validationResult: FileUploaderFileValidationResult) => {\n setFiles((files) => updateFile(files, fileId, () => ({ validationResult })));\n }, []);\n\n const reset = React.useCallback(() => {\n setFiles(() => [] as FileUploaderAttachedFile[]);\n }, []);\n\n return (\n <FileUploaderControlContext.Provider\n value={useMemoObject({\n setFileStatus,\n files,\n setFiles: handleExternalSetFiles,\n removeFile,\n setFileValidationResult,\n reset,\n isMinLengthReached,\n setIsMinLengthReached,\n })}\n >\n {children}\n </FileUploaderControlContext.Provider>\n );\n};\n\nFileUploaderControlProvider.displayName = 'FileUploaderControlProvider';\n"]}
@@ -13,6 +13,7 @@ import { isKeyEnter } from "../../../../lib/events/keyboard/identifiers";
13
13
  import { Hint } from "../../../../components/Hint";
14
14
  import { Tooltip } from "../../../../components/Tooltip";
15
15
  import { getDOMRect } from "../../../../lib/dom/getDOMRect";
16
+ import { useFileUploaderSize } from "../../hooks/useFileUploaderSize";
16
17
  import { jsStyles } from "../FileUploaderFile.styles";
17
18
 
18
19
  var getTruncatedName = function getTruncatedName(fileNameWidth, fileNameElementWidth, name) {
@@ -29,6 +30,15 @@ var getTruncatedName = function getTruncatedName(fileNameWidth, fileNameElementW
29
30
  return truncate(name, maxCharsCountInSpan);
30
31
  };
31
32
 
33
+ var calcTruncatedName = function calcTruncatedName(textHelperRef, fileNameElementRef, name) {
34
+ var _textHelperRef$curren;
35
+
36
+ var fileNameWidth = ((_textHelperRef$curren = textHelperRef.current) == null ? void 0 : _textHelperRef$curren.getTextWidth()) || 0;
37
+ var fileNameElementWidth = getDOMRect(fileNameElementRef.current).width;
38
+ return getTruncatedName(fileNameWidth, fileNameElementWidth, name);
39
+ };
40
+
41
+ var MIN_CHARS_LENGTH = 3;
32
42
  export var FileUploaderFileDataTids = {
33
43
  file: 'FileUploader__file',
34
44
  fileTooltip: 'FileUploader__fileTooltip',
@@ -41,13 +51,15 @@ export var FileUploaderFile = function FileUploaderFile(props) {
41
51
 
42
52
  var file = props.file,
43
53
  showSize = props.showSize,
44
- error = props.error;
54
+ error = props.error,
55
+ multiple = props.multiple,
56
+ size = props.size;
45
57
  var id = file.id,
46
58
  originalFile = file.originalFile,
47
59
  status = file.status,
48
60
  validationResult = file.validationResult;
49
61
  var name = originalFile.name,
50
- size = originalFile.size;
62
+ fileSize = originalFile.size;
51
63
 
52
64
  var _useState = useState(false),
53
65
  hovered = _useState[0],
@@ -65,21 +77,24 @@ export var FileUploaderFile = function FileUploaderFile(props) {
65
77
  var fileNameElementRef = useRef(null);
66
78
 
67
79
  var _useContext = useContext(FileUploaderControlContext),
68
- removeFile = _useContext.removeFile;
80
+ removeFile = _useContext.removeFile,
81
+ setIsMinLengthReached = _useContext.setIsMinLengthReached,
82
+ isMinLengthReached = _useContext.isMinLengthReached;
69
83
 
70
84
  var theme = useContext(ThemeContext);
71
85
  var formattedSize = useMemo(function () {
72
- return formatBytes(size, 1);
73
- }, [size]); // важно запустить после рендера, чтобы успели проставиться рефы
74
-
86
+ return formatBytes(fileSize, 1);
87
+ }, [fileSize]);
75
88
  useEffect(function () {
76
- var _textHelperRef$curren;
89
+ var _truncatedName$length;
77
90
 
78
- var fileNameWidth = ((_textHelperRef$curren = textHelperRef.current) == null ? void 0 : _textHelperRef$curren.getTextWidth()) || 0;
79
- var fileNameElementWidth = getDOMRect(fileNameElementRef.current).width;
80
- var truncatedName = getTruncatedName(fileNameWidth, fileNameElementWidth, name);
91
+ var truncatedName = calcTruncatedName(textHelperRef, fileNameElementRef, name);
92
+ setIsMinLengthReached(((_truncatedName$length = truncatedName == null ? void 0 : truncatedName.length) != null ? _truncatedName$length : 0) <= MIN_CHARS_LENGTH);
93
+ }, [name, isMinLengthReached]);
94
+ useEffect(function () {
95
+ var truncatedName = calcTruncatedName(textHelperRef, fileNameElementRef, name);
81
96
  setTruncatedFileName(truncatedName);
82
- }, [name]);
97
+ });
83
98
  var removeUploadFile = useCallback(function () {
84
99
  removeFile(id);
85
100
  }, [removeFile, id]);
@@ -121,10 +136,20 @@ export var FileUploaderFile = function FileUploaderFile(props) {
121
136
  return deleteIcon;
122
137
  }
123
138
  }, [hovered, status, isInvalid, theme, focusedByTab]);
139
+ var sizeIconClass = useFileUploaderSize(size, {
140
+ small: jsStyles.iconSmall(theme),
141
+ medium: jsStyles.iconMedium(theme),
142
+ large: jsStyles.iconLarge(theme)
143
+ });
124
144
  var renderTooltipContent = useCallback(function () {
125
145
  return !isValid && !error && message ? message : null;
126
146
  }, [isValid, error, message]);
127
- var contentClassNames = cx(jsStyles.content(), (_cx = {}, _cx[jsStyles.error(theme)] = isInvalid, _cx));
147
+ var sizeContentClass = useFileUploaderSize(size, {
148
+ small: jsStyles.contentSmall(theme),
149
+ medium: jsStyles.contentMedium(theme),
150
+ large: jsStyles.contentLarge(theme)
151
+ });
152
+ var contentClassNames = cx(jsStyles.content(), (_cx = {}, _cx[sizeContentClass] = true, _cx[jsStyles.error(theme)] = isInvalid, _cx));
128
153
  var handleMouseEnter = useCallback(function () {
129
154
  setHovered(true);
130
155
  }, []);
@@ -148,7 +173,7 @@ export var FileUploaderFile = function FileUploaderFile(props) {
148
173
  removeUploadFile();
149
174
  }
150
175
  }, [removeUploadFile]);
151
- var iconClassNames = cx(jsStyles.icon(theme), (_cx2 = {}, _cx2[jsStyles.focusedIcon(theme)] = focusedByTab, _cx2));
176
+ var iconClassNames = cx(jsStyles.icon(theme), (_cx2 = {}, _cx2[jsStyles.focusedIcon(theme)] = focusedByTab, _cx2[sizeIconClass] = true, _cx2[jsStyles.iconMultiple()] = multiple, _cx2));
152
177
  var isTruncated = truncatedFileName !== name;
153
178
  return /*#__PURE__*/React.createElement("div", {
154
179
  "data-tid": FileUploaderFileDataTids.file,
@@ -1 +1 @@
1
- {"version":3,"sources":["FileUploaderFile.tsx"],"names":["React","useCallback","useContext","useEffect","useMemo","useRef","useState","FileUploaderFileStatus","formatBytes","TextWidthHelper","truncate","Spinner","FileUploaderControlContext","cx","ThemeContext","DeleteIcon","ErrorIcon","OkIcon","keyListener","isKeyEnter","Hint","Tooltip","getDOMRect","jsStyles","getTruncatedName","fileNameWidth","fileNameElementWidth","name","charWidth","Math","ceil","length","maxCharsCountInSpan","FileUploaderFileDataTids","file","fileTooltip","fileName","fileSize","fileIcon","FileUploaderFile","props","showSize","error","id","originalFile","status","validationResult","size","hovered","setHovered","focusedByTab","setFocusedByTab","truncatedFileName","setTruncatedFileName","textHelperRef","fileNameElementRef","removeFile","theme","formattedSize","current","getTextWidth","width","truncatedName","removeUploadFile","handleRemove","event","preventDefault","stopPropagation","isValid","message","isInvalid","icon","deleteIcon","Loading","Uploaded","fileUploaderIconColor","renderTooltipContent","contentClassNames","content","handleMouseEnter","handleMouseLeave","handleFocus","requestAnimationFrame","isTabPressed","handleBlur","handleIconKeyDown","e","iconClassNames","focusedIcon","isTruncated","root","displayName"],"mappings":"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","sourcesContent":["import React, { ReactNode, useCallback, useContext, useEffect, useMemo, useRef, useState } from 'react';\n\nimport { FileUploaderAttachedFile, FileUploaderFileStatus } from '../fileUtils';\nimport { formatBytes } from '../../../lib/utils';\nimport { TextWidthHelper } from '../../../internal/TextWidthHelper/TextWidthHelper';\nimport { truncate } from '../../../lib/stringUtils';\nimport { Spinner } from '../../../components/Spinner';\nimport { FileUploaderControlContext } from '../FileUploaderControlContext';\nimport { cx } from '../../../lib/theming/Emotion';\nimport { ThemeContext } from '../../../lib/theming/ThemeContext';\nimport { DeleteIcon, ErrorIcon, OkIcon } from '../../icons/16px';\nimport { keyListener } from '../../../lib/events/keyListener';\nimport { isKeyEnter } from '../../../lib/events/keyboard/identifiers';\nimport { Nullable } from '../../../typings/utility-types';\nimport { Hint } from '../../../components/Hint';\nimport { Tooltip } from '../../../components/Tooltip';\nimport { getDOMRect } from '../../../lib/dom/getDOMRect';\n\nimport { jsStyles } from './FileUploaderFile.styles';\n\ninterface FileUploaderFileProps {\n file: FileUploaderAttachedFile;\n showSize?: boolean;\n /** Состояние ошибки контрола файла */\n error?: boolean;\n}\n\nconst getTruncatedName = (fileNameWidth: number, fileNameElementWidth: number, name: string) => {\n if (!fileNameWidth && !fileNameElementWidth) {\n return null;\n }\n\n if (fileNameWidth <= fileNameElementWidth) {\n return name;\n }\n\n const charWidth = Math.ceil(fileNameWidth / name.length);\n const maxCharsCountInSpan = Math.ceil(fileNameElementWidth / charWidth);\n\n return truncate(name, maxCharsCountInSpan);\n};\n\nexport const FileUploaderFileDataTids = {\n file: 'FileUploader__file',\n fileTooltip: 'FileUploader__fileTooltip',\n fileName: 'FileUploader__fileName',\n fileSize: 'FileUploader__fileSize',\n fileIcon: 'FileUploader__fileIcon',\n} as const;\n\nexport const FileUploaderFile = (props: FileUploaderFileProps) => {\n const { file, showSize, error } = props;\n const { id, originalFile, status, validationResult } = file;\n const { name, size } = originalFile;\n\n const [hovered, setHovered] = useState<boolean>(false);\n const [focusedByTab, setFocusedByTab] = useState(false);\n const [truncatedFileName, setTruncatedFileName] = useState<Nullable<string>>(null);\n\n const textHelperRef = useRef<TextWidthHelper>(null);\n const fileNameElementRef = useRef<HTMLSpanElement>(null);\n\n const { removeFile } = useContext(FileUploaderControlContext);\n const theme = useContext(ThemeContext);\n\n const formattedSize = useMemo(() => formatBytes(size, 1), [size]);\n\n // важно запустить после рендера, чтобы успели проставиться рефы\n useEffect(() => {\n const fileNameWidth = textHelperRef.current?.getTextWidth() || 0;\n const fileNameElementWidth = getDOMRect(fileNameElementRef.current).width;\n const truncatedName = getTruncatedName(fileNameWidth, fileNameElementWidth, name);\n\n setTruncatedFileName(truncatedName);\n }, [name]);\n\n const removeUploadFile = useCallback(() => {\n removeFile(id);\n }, [removeFile, id]);\n\n const handleRemove = useCallback(\n (event: React.MouseEvent<HTMLElement>) => {\n event.preventDefault();\n event.stopPropagation();\n removeUploadFile();\n },\n [removeUploadFile],\n );\n\n const { isValid, message } = validationResult;\n\n const isInvalid = error || !isValid;\n\n const icon: ReactNode = useMemo(() => {\n const deleteIcon = <DeleteIcon className={jsStyles.deleteIcon(theme)} />;\n\n if (hovered || focusedByTab) {\n return deleteIcon;\n }\n\n if (isInvalid) {\n return <ErrorIcon />;\n }\n\n switch (status) {\n case FileUploaderFileStatus.Loading:\n return <Spinner type=\"mini\" dimmed caption=\"\" />;\n case FileUploaderFileStatus.Uploaded:\n return <OkIcon color={theme.fileUploaderIconColor} />;\n default:\n return deleteIcon;\n }\n }, [hovered, status, isInvalid, theme, focusedByTab]);\n\n const renderTooltipContent = useCallback((): ReactNode => {\n return !isValid && !error && message ? message : null;\n }, [isValid, error, message]);\n\n const contentClassNames = cx(jsStyles.content(), {\n [jsStyles.error(theme)]: isInvalid,\n });\n\n const handleMouseEnter = useCallback(() => {\n setHovered(true);\n }, []);\n\n const handleMouseLeave = useCallback(() => {\n setHovered(false);\n }, []);\n\n const handleFocus = useCallback(() => {\n // focus event fires before keyDown eventlistener\n // so we should check tabPressed in async way\n requestAnimationFrame(() => {\n if (keyListener.isTabPressed) {\n setFocusedByTab(true);\n }\n });\n }, []);\n\n const handleBlur = useCallback(() => {\n setFocusedByTab(false);\n }, []);\n\n const handleIconKeyDown = useCallback(\n (e: React.KeyboardEvent<HTMLElement>) => {\n if (isKeyEnter(e)) {\n removeUploadFile();\n }\n },\n [removeUploadFile],\n );\n\n const iconClassNames = cx(jsStyles.icon(theme), {\n [jsStyles.focusedIcon(theme)]: focusedByTab,\n });\n\n const isTruncated = truncatedFileName !== name;\n\n return (\n <div\n data-tid={FileUploaderFileDataTids.file}\n className={jsStyles.root()}\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n >\n <Tooltip data-tid={FileUploaderFileDataTids.fileTooltip} pos=\"right middle\" render={renderTooltipContent}>\n <div className={contentClassNames}>\n <TextWidthHelper ref={textHelperRef} text={name} />\n <Hint maxWidth={'100%'} text={isTruncated ? name : null}>\n <span data-tid={FileUploaderFileDataTids.fileName} ref={fileNameElementRef} className={jsStyles.name()}>\n {truncatedFileName}\n </span>\n </Hint>\n {!!showSize && formattedSize && (\n <span data-tid={FileUploaderFileDataTids.fileSize} className={jsStyles.size()}>\n {formattedSize}\n </span>\n )}\n <div\n className={iconClassNames}\n data-tid={FileUploaderFileDataTids.fileIcon}\n tabIndex={0}\n onClick={handleRemove}\n onFocus={handleFocus}\n onBlur={handleBlur}\n onKeyDown={handleIconKeyDown}\n >\n {icon}\n </div>\n </div>\n </Tooltip>\n </div>\n );\n};\n\nFileUploaderFile.displayName = 'FileUploaderFile';\n"]}
1
+ {"version":3,"sources":["FileUploaderFile.tsx"],"names":["React","useCallback","useContext","useEffect","useMemo","useRef","useState","FileUploaderFileStatus","formatBytes","TextWidthHelper","truncate","Spinner","FileUploaderControlContext","cx","ThemeContext","DeleteIcon","ErrorIcon","OkIcon","keyListener","isKeyEnter","Hint","Tooltip","getDOMRect","useFileUploaderSize","jsStyles","getTruncatedName","fileNameWidth","fileNameElementWidth","name","charWidth","Math","ceil","length","maxCharsCountInSpan","calcTruncatedName","textHelperRef","fileNameElementRef","current","getTextWidth","width","MIN_CHARS_LENGTH","FileUploaderFileDataTids","file","fileTooltip","fileName","fileSize","fileIcon","FileUploaderFile","props","showSize","error","multiple","size","id","originalFile","status","validationResult","hovered","setHovered","focusedByTab","setFocusedByTab","truncatedFileName","setTruncatedFileName","removeFile","setIsMinLengthReached","isMinLengthReached","theme","formattedSize","truncatedName","removeUploadFile","handleRemove","event","preventDefault","stopPropagation","isValid","message","isInvalid","icon","deleteIcon","Loading","Uploaded","fileUploaderIconColor","sizeIconClass","small","iconSmall","medium","iconMedium","large","iconLarge","renderTooltipContent","sizeContentClass","contentSmall","contentMedium","contentLarge","contentClassNames","content","handleMouseEnter","handleMouseLeave","handleFocus","requestAnimationFrame","isTabPressed","handleBlur","handleIconKeyDown","e","iconClassNames","focusedIcon","iconMultiple","isTruncated","root","displayName"],"mappings":"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","sourcesContent":["import React, { ReactNode, useCallback, useContext, useEffect, useMemo, useRef, useState } from 'react';\n\nimport { FileUploaderAttachedFile, FileUploaderFileStatus } from '../fileUtils';\nimport { formatBytes } from '../../../lib/utils';\nimport { TextWidthHelper } from '../../../internal/TextWidthHelper/TextWidthHelper';\nimport { truncate } from '../../../lib/stringUtils';\nimport { Spinner } from '../../../components/Spinner';\nimport { FileUploaderControlContext } from '../FileUploaderControlContext';\nimport { cx } from '../../../lib/theming/Emotion';\nimport { ThemeContext } from '../../../lib/theming/ThemeContext';\nimport { DeleteIcon, ErrorIcon, OkIcon } from '../../icons/16px';\nimport { keyListener } from '../../../lib/events/keyListener';\nimport { isKeyEnter } from '../../../lib/events/keyboard/identifiers';\nimport { Nullable } from '../../../typings/utility-types';\nimport { Hint } from '../../../components/Hint';\nimport { Tooltip } from '../../../components/Tooltip';\nimport { getDOMRect } from '../../../lib/dom/getDOMRect';\nimport { FileUploaderSize } from '../../../components/FileUploader';\nimport { useFileUploaderSize } from '../hooks/useFileUploaderSize';\n\nimport { jsStyles } from './FileUploaderFile.styles';\n\ninterface FileUploaderFileProps {\n file: FileUploaderAttachedFile;\n showSize?: boolean;\n multiple?: boolean;\n size: FileUploaderSize;\n /** Состояние ошибки контрола файла */\n error?: boolean;\n}\n\nconst getTruncatedName = (fileNameWidth: number, fileNameElementWidth: number, name: string) => {\n if (!fileNameWidth && !fileNameElementWidth) {\n return null;\n }\n\n if (fileNameWidth <= fileNameElementWidth) {\n return name;\n }\n\n const charWidth = Math.ceil(fileNameWidth / name.length);\n const maxCharsCountInSpan = Math.ceil(fileNameElementWidth / charWidth);\n\n return truncate(name, maxCharsCountInSpan);\n};\n\nconst calcTruncatedName = (\n textHelperRef: React.RefObject<TextWidthHelper>,\n fileNameElementRef: React.RefObject<HTMLSpanElement>,\n name: string,\n) => {\n const fileNameWidth = textHelperRef.current?.getTextWidth() || 0;\n const fileNameElementWidth = getDOMRect(fileNameElementRef.current).width;\n\n return getTruncatedName(fileNameWidth, fileNameElementWidth, name);\n};\n\nconst MIN_CHARS_LENGTH = 3;\n\nexport const FileUploaderFileDataTids = {\n file: 'FileUploader__file',\n fileTooltip: 'FileUploader__fileTooltip',\n fileName: 'FileUploader__fileName',\n fileSize: 'FileUploader__fileSize',\n fileIcon: 'FileUploader__fileIcon',\n} as const;\n\nexport const FileUploaderFile = (props: FileUploaderFileProps) => {\n const { file, showSize, error, multiple, size } = props;\n const { id, originalFile, status, validationResult } = file;\n const { name, size: fileSize } = originalFile;\n\n const [hovered, setHovered] = useState<boolean>(false);\n const [focusedByTab, setFocusedByTab] = useState(false);\n const [truncatedFileName, setTruncatedFileName] = useState<Nullable<string>>(null);\n\n const textHelperRef = useRef<TextWidthHelper>(null);\n const fileNameElementRef = useRef<HTMLSpanElement>(null);\n\n const { removeFile, setIsMinLengthReached, isMinLengthReached } = useContext(FileUploaderControlContext);\n const theme = useContext(ThemeContext);\n\n const formattedSize = useMemo(() => formatBytes(fileSize, 1), [fileSize]);\n\n useEffect(() => {\n const truncatedName = calcTruncatedName(textHelperRef, fileNameElementRef, name);\n\n setIsMinLengthReached((truncatedName?.length ?? 0) <= MIN_CHARS_LENGTH);\n }, [name, isMinLengthReached]);\n\n useEffect(() => {\n const truncatedName = calcTruncatedName(textHelperRef, fileNameElementRef, name);\n\n setTruncatedFileName(truncatedName);\n });\n\n const removeUploadFile = useCallback(() => {\n removeFile(id);\n }, [removeFile, id]);\n\n const handleRemove = useCallback(\n (event: React.MouseEvent<HTMLElement>) => {\n event.preventDefault();\n event.stopPropagation();\n removeUploadFile();\n },\n [removeUploadFile],\n );\n\n const { isValid, message } = validationResult;\n\n const isInvalid = error || !isValid;\n\n const icon: ReactNode = useMemo(() => {\n const deleteIcon = <DeleteIcon className={jsStyles.deleteIcon(theme)} />;\n\n if (hovered || focusedByTab) {\n return deleteIcon;\n }\n\n if (isInvalid) {\n return <ErrorIcon />;\n }\n\n switch (status) {\n case FileUploaderFileStatus.Loading:\n return <Spinner type=\"mini\" dimmed caption=\"\" />;\n case FileUploaderFileStatus.Uploaded:\n return <OkIcon color={theme.fileUploaderIconColor} />;\n default:\n return deleteIcon;\n }\n }, [hovered, status, isInvalid, theme, focusedByTab]);\n\n const sizeIconClass = useFileUploaderSize(size, {\n small: jsStyles.iconSmall(theme),\n medium: jsStyles.iconMedium(theme),\n large: jsStyles.iconLarge(theme),\n });\n\n const renderTooltipContent = useCallback((): ReactNode => {\n return !isValid && !error && message ? message : null;\n }, [isValid, error, message]);\n\n const sizeContentClass = useFileUploaderSize(size, {\n small: jsStyles.contentSmall(theme),\n medium: jsStyles.contentMedium(theme),\n large: jsStyles.contentLarge(theme),\n });\n\n const contentClassNames = cx(jsStyles.content(), {\n [sizeContentClass]: true,\n [jsStyles.error(theme)]: isInvalid,\n });\n\n const handleMouseEnter = useCallback(() => {\n setHovered(true);\n }, []);\n\n const handleMouseLeave = useCallback(() => {\n setHovered(false);\n }, []);\n\n const handleFocus = useCallback(() => {\n // focus event fires before keyDown eventlistener\n // so we should check tabPressed in async way\n requestAnimationFrame(() => {\n if (keyListener.isTabPressed) {\n setFocusedByTab(true);\n }\n });\n }, []);\n\n const handleBlur = useCallback(() => {\n setFocusedByTab(false);\n }, []);\n\n const handleIconKeyDown = useCallback(\n (e: React.KeyboardEvent<HTMLElement>) => {\n if (isKeyEnter(e)) {\n removeUploadFile();\n }\n },\n [removeUploadFile],\n );\n\n const iconClassNames = cx(jsStyles.icon(theme), {\n [jsStyles.focusedIcon(theme)]: focusedByTab,\n [sizeIconClass]: true,\n [jsStyles.iconMultiple()]: multiple,\n });\n\n const isTruncated = truncatedFileName !== name;\n\n return (\n <div\n data-tid={FileUploaderFileDataTids.file}\n className={jsStyles.root()}\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n >\n <Tooltip data-tid={FileUploaderFileDataTids.fileTooltip} pos=\"right middle\" render={renderTooltipContent}>\n <div className={contentClassNames}>\n <TextWidthHelper ref={textHelperRef} text={name} />\n <Hint maxWidth={'100%'} text={isTruncated ? name : null}>\n <span data-tid={FileUploaderFileDataTids.fileName} ref={fileNameElementRef} className={jsStyles.name()}>\n {truncatedFileName}\n </span>\n </Hint>\n {!!showSize && formattedSize && (\n <span data-tid={FileUploaderFileDataTids.fileSize} className={jsStyles.size()}>\n {formattedSize}\n </span>\n )}\n <div\n className={iconClassNames}\n data-tid={FileUploaderFileDataTids.fileIcon}\n tabIndex={0}\n onClick={handleRemove}\n onFocus={handleFocus}\n onBlur={handleBlur}\n onKeyDown={handleIconKeyDown}\n >\n {icon}\n </div>\n </div>\n </Tooltip>\n </div>\n );\n};\n\nFileUploaderFile.displayName = 'FileUploaderFile';\n"]}
@@ -1,7 +1,10 @@
1
1
  import { FileUploaderAttachedFile } from '../fileUtils';
2
+ import { FileUploaderSize } from '../../../components/FileUploader';
2
3
  interface FileUploaderFileProps {
3
4
  file: FileUploaderAttachedFile;
4
5
  showSize?: boolean;
6
+ multiple?: boolean;
7
+ size: FileUploaderSize;
5
8
  /** Состояние ошибки контрола файла */
6
9
  error?: boolean;
7
10
  }
@@ -1,6 +1,6 @@
1
1
  import _taggedTemplateLiteralLoose from "@babel/runtime/helpers/esm/taggedTemplateLiteralLoose";
2
2
 
3
- var _templateObject, _templateObject2, _templateObject3, _templateObject4, _templateObject5, _templateObject6, _templateObject7, _templateObject8;
3
+ var _templateObject, _templateObject2, _templateObject3, _templateObject4, _templateObject5, _templateObject6, _templateObject7, _templateObject8, _templateObject9, _templateObject10, _templateObject11, _templateObject12, _templateObject13, _templateObject14, _templateObject15;
4
4
 
5
5
  import { css, memoizeStyle } from "../../../../lib/theming/Emotion";
6
6
  var styles = {
@@ -8,7 +8,7 @@ var styles = {
8
8
  return css(_templateObject || (_templateObject = _taggedTemplateLiteralLoose(["\n width: 100%;\n "])));
9
9
  },
10
10
  content: function content() {
11
- return css(_templateObject2 || (_templateObject2 = _taggedTemplateLiteralLoose(["\n display: flex;\n width: 100%;\n align-items: center;\n position: relative;\n "])));
11
+ return css(_templateObject2 || (_templateObject2 = _taggedTemplateLiteralLoose(["\n display: flex;\n width: 100%;\n align-items: center;\n "])));
12
12
  },
13
13
  error: function error(t) {
14
14
  return css(_templateObject3 || (_templateObject3 = _taggedTemplateLiteralLoose(["\n color: ", ";\n "])), t.fileUploaderBorderColorError);
@@ -20,13 +20,34 @@ var styles = {
20
20
  return css(_templateObject5 || (_templateObject5 = _taggedTemplateLiteralLoose(["\n margin-left: 28px;\n flex: 1 0 auto;\n "])));
21
21
  },
22
22
  icon: function icon(t) {
23
- return css(_templateObject6 || (_templateObject6 = _taggedTemplateLiteralLoose(["\n width: 16px;\n margin-left: 23px;\n flex: 1 0 auto;\n cursor: pointer;\n font-size: ", ";\n text-align: right;\n outline: none;\n "])), t.fileUploaderIconSize);
23
+ return css(_templateObject6 || (_templateObject6 = _taggedTemplateLiteralLoose(["\n width: 16px;\n flex: 1 0 auto;\n cursor: pointer;\n font-size: ", ";\n text-align: right;\n outline: none;\n\n position: absolute;\n "])), t.fileUploaderIconSize);
24
+ },
25
+ iconSmall: function iconSmall(t) {
26
+ return css(_templateObject7 || (_templateObject7 = _taggedTemplateLiteralLoose(["\n margin-left: 4px;\n right: ", ";\n "])), t.fileUploaderPaddingXSmall);
27
+ },
28
+ iconMedium: function iconMedium(t) {
29
+ return css(_templateObject8 || (_templateObject8 = _taggedTemplateLiteralLoose(["\n margin-left: 6px;\n right: ", ";\n width: 18px;\n "])), t.fileUploaderPaddingXMedium);
30
+ },
31
+ iconLarge: function iconLarge(t) {
32
+ return css(_templateObject9 || (_templateObject9 = _taggedTemplateLiteralLoose(["\n margin-left: 6px;\n right: ", ";\n width: 20px;\n "])), t.fileUploaderPaddingXLarge);
33
+ },
34
+ iconMultiple: function iconMultiple() {
35
+ return css(_templateObject10 || (_templateObject10 = _taggedTemplateLiteralLoose(["\n position: static;\n "])));
36
+ },
37
+ contentSmall: function contentSmall(t) {
38
+ return css(_templateObject11 || (_templateObject11 = _taggedTemplateLiteralLoose(["\n font-size: ", ";\n "])), t.fileUploaderFontSizeSmall);
39
+ },
40
+ contentMedium: function contentMedium(t) {
41
+ return css(_templateObject12 || (_templateObject12 = _taggedTemplateLiteralLoose(["\n font-size: ", ";\n "])), t.fileUploaderFontSizeMedium);
42
+ },
43
+ contentLarge: function contentLarge(t) {
44
+ return css(_templateObject13 || (_templateObject13 = _taggedTemplateLiteralLoose(["\n font-size: ", ";\n "])), t.fileUploaderFontSizeLarge);
24
45
  },
25
46
  deleteIcon: function deleteIcon(t) {
26
- return css(_templateObject7 || (_templateObject7 = _taggedTemplateLiteralLoose(["\n color: ", ";\n &:hover {\n color: ", ";\n }\n "])), t.fileUploaderIconColor, t.fileUploaderIconHoverColor);
47
+ return css(_templateObject14 || (_templateObject14 = _taggedTemplateLiteralLoose(["\n color: ", ";\n &:hover {\n color: ", ";\n }\n "])), t.fileUploaderIconColor, t.fileUploaderIconHoverColor);
27
48
  },
28
49
  focusedIcon: function focusedIcon(t) {
29
- return css(_templateObject8 || (_templateObject8 = _taggedTemplateLiteralLoose(["\n outline: 1px solid ", ";\n "])), t.borderColorFocus);
50
+ return css(_templateObject15 || (_templateObject15 = _taggedTemplateLiteralLoose(["\n outline: 1px solid ", ";\n "])), t.borderColorFocus);
30
51
  }
31
52
  };
32
53
  export var jsStyles = memoizeStyle(styles);
@@ -1 +1 @@
1
- {"version":3,"sources":["FileUploaderFile.styles.ts"],"names":["css","memoizeStyle","styles","root","content","error","t","fileUploaderBorderColorError","name","size","icon","fileUploaderIconSize","deleteIcon","fileUploaderIconColor","fileUploaderIconHoverColor","focusedIcon","borderColorFocus","jsStyles"],"mappings":"kPAAA,SAASA,GAAT,EAAcC,YAAd,QAAkC,8BAAlC;;;AAGA,IAAMC,MAAM,GAAG;AACbC,EAAAA,IADa,kBACN;AACL,WAAOH,GAAP;;;AAGD,GALY;;AAObI,EAAAA,OAPa,qBAOH;AACR,WAAOJ,GAAP;;;;;;AAMD,GAdY;;AAgBbK,EAAAA,KAhBa,iBAgBPC,CAhBO,EAgBG;AACd,WAAON,GAAP;AACWM,IAAAA,CAAC,CAACC,4BADb;;AAGD,GApBY;;AAsBbC,EAAAA,IAtBa,kBAsBN;AACL,WAAOR,GAAP;;;;AAID,GA3BY;;AA6BbS,EAAAA,IA7Ba,kBA6BN;AACL,WAAOT,GAAP;;;;AAID,GAlCY;;AAoCbU,EAAAA,IApCa,gBAoCRJ,CApCQ,EAoCE;AACb,WAAON,GAAP;;;;;AAKeM,IAAAA,CAAC,CAACK,oBALjB;;;;AASD,GA9CY;;AAgDbC,EAAAA,UAhDa,sBAgDFN,CAhDE,EAgDQ;AACnB,WAAON,GAAP;AACWM,IAAAA,CAAC,CAACO,qBADb;;AAGaP,IAAAA,CAAC,CAACQ,0BAHf;;;AAMD,GAvDY;;AAyDbC,EAAAA,WAzDa,uBAyDDT,CAzDC,EAyDS;AACpB,WAAON,GAAP;AACuBM,IAAAA,CAAC,CAACU,gBADzB;;AAGD,GA7DY,EAAf;;;AAgEA,OAAO,IAAMC,QAAQ,GAAGhB,YAAY,CAACC,MAAD,CAA7B","sourcesContent":["import { css, memoizeStyle } from '../../../lib/theming/Emotion';\nimport { Theme } from '../../../lib/theming/Theme';\n\nconst styles = {\n root() {\n return css`\n width: 100%;\n `;\n },\n\n content() {\n return css`\n display: flex;\n width: 100%;\n align-items: center;\n position: relative;\n `;\n },\n\n error(t: Theme) {\n return css`\n color: ${t.fileUploaderBorderColorError};\n `;\n },\n\n name() {\n return css`\n flex: 1 1 100%;\n overflow: hidden;\n `;\n },\n\n size() {\n return css`\n margin-left: 28px;\n flex: 1 0 auto;\n `;\n },\n\n icon(t: Theme) {\n return css`\n width: 16px;\n margin-left: 23px;\n flex: 1 0 auto;\n cursor: pointer;\n font-size: ${t.fileUploaderIconSize};\n text-align: right;\n outline: none;\n `;\n },\n\n deleteIcon(t: Theme) {\n return css`\n color: ${t.fileUploaderIconColor};\n &:hover {\n color: ${t.fileUploaderIconHoverColor};\n }\n `;\n },\n\n focusedIcon(t: Theme) {\n return css`\n outline: 1px solid ${t.borderColorFocus};\n `;\n },\n};\n\nexport const jsStyles = memoizeStyle(styles);\n"]}
1
+ {"version":3,"sources":["FileUploaderFile.styles.ts"],"names":["css","memoizeStyle","styles","root","content","error","t","fileUploaderBorderColorError","name","size","icon","fileUploaderIconSize","iconSmall","fileUploaderPaddingXSmall","iconMedium","fileUploaderPaddingXMedium","iconLarge","fileUploaderPaddingXLarge","iconMultiple","contentSmall","fileUploaderFontSizeSmall","contentMedium","fileUploaderFontSizeMedium","contentLarge","fileUploaderFontSizeLarge","deleteIcon","fileUploaderIconColor","fileUploaderIconHoverColor","focusedIcon","borderColorFocus","jsStyles"],"mappings":"sXAAA,SAASA,GAAT,EAAcC,YAAd,QAAkC,8BAAlC;;;AAGA,IAAMC,MAAM,GAAG;AACbC,EAAAA,IADa,kBACN;AACL,WAAOH,GAAP;;;AAGD,GALY;;AAObI,EAAAA,OAPa,qBAOH;AACR,WAAOJ,GAAP;;;;;AAKD,GAbY;;AAebK,EAAAA,KAfa,iBAePC,CAfO,EAeG;AACd,WAAON,GAAP;AACWM,IAAAA,CAAC,CAACC,4BADb;;AAGD,GAnBY;;AAqBbC,EAAAA,IArBa,kBAqBN;AACL,WAAOR,GAAP;;;;AAID,GA1BY;;AA4BbS,EAAAA,IA5Ba,kBA4BN;AACL,WAAOT,GAAP;;;;AAID,GAjCY;;AAmCbU,EAAAA,IAnCa,gBAmCRJ,CAnCQ,EAmCE;AACb,WAAON,GAAP;;;;AAIeM,IAAAA,CAAC,CAACK,oBAJjB;;;;;;AAUD,GA9CY;;AAgDbC,EAAAA,SAhDa,qBAgDHN,CAhDG,EAgDO;AAClB,WAAON,GAAP;;AAEWM,IAAAA,CAAC,CAACO,yBAFb;;AAID,GArDY;;AAuDbC,EAAAA,UAvDa,sBAuDFR,CAvDE,EAuDQ;AACnB,WAAON,GAAP;;AAEWM,IAAAA,CAAC,CAACS,0BAFb;;;AAKD,GA7DY;;AA+DbC,EAAAA,SA/Da,qBA+DHV,CA/DG,EA+DO;AAClB,WAAON,GAAP;;AAEWM,IAAAA,CAAC,CAACW,yBAFb;;;AAKD,GArEY;;AAuEbC,EAAAA,YAvEa,0BAuEE;AACb,WAAOlB,GAAP;;;AAGD,GA3EY;;AA6EbmB,EAAAA,YA7Ea,wBA6EAb,CA7EA,EA6EU;AACrB,WAAON,GAAP;AACeM,IAAAA,CAAC,CAACc,yBADjB;;AAGD,GAjFY;;AAmFbC,EAAAA,aAnFa,yBAmFCf,CAnFD,EAmFW;AACtB,WAAON,GAAP;AACeM,IAAAA,CAAC,CAACgB,0BADjB;;AAGD,GAvFY;;AAyFbC,EAAAA,YAzFa,wBAyFAjB,CAzFA,EAyFU;AACrB,WAAON,GAAP;AACeM,IAAAA,CAAC,CAACkB,yBADjB;;AAGD,GA7FY;;AA+FbC,EAAAA,UA/Fa,sBA+FFnB,CA/FE,EA+FQ;AACnB,WAAON,GAAP;AACWM,IAAAA,CAAC,CAACoB,qBADb;;AAGapB,IAAAA,CAAC,CAACqB,0BAHf;;;AAMD,GAtGY;;AAwGbC,EAAAA,WAxGa,uBAwGDtB,CAxGC,EAwGS;AACpB,WAAON,GAAP;AACuBM,IAAAA,CAAC,CAACuB,gBADzB;;AAGD,GA5GY,EAAf;;;AA+GA,OAAO,IAAMC,QAAQ,GAAG7B,YAAY,CAACC,MAAD,CAA7B","sourcesContent":["import { css, memoizeStyle } from '../../../lib/theming/Emotion';\nimport { Theme } from '../../../lib/theming/Theme';\n\nconst styles = {\n root() {\n return css`\n width: 100%;\n `;\n },\n\n content() {\n return css`\n display: flex;\n width: 100%;\n align-items: center;\n `;\n },\n\n error(t: Theme) {\n return css`\n color: ${t.fileUploaderBorderColorError};\n `;\n },\n\n name() {\n return css`\n flex: 1 1 100%;\n overflow: hidden;\n `;\n },\n\n size() {\n return css`\n margin-left: 28px;\n flex: 1 0 auto;\n `;\n },\n\n icon(t: Theme) {\n return css`\n width: 16px;\n flex: 1 0 auto;\n cursor: pointer;\n font-size: ${t.fileUploaderIconSize};\n text-align: right;\n outline: none;\n\n position: absolute;\n `;\n },\n\n iconSmall(t: Theme) {\n return css`\n margin-left: 4px;\n right: ${t.fileUploaderPaddingXSmall};\n `;\n },\n\n iconMedium(t: Theme) {\n return css`\n margin-left: 6px;\n right: ${t.fileUploaderPaddingXMedium};\n width: 18px;\n `;\n },\n\n iconLarge(t: Theme) {\n return css`\n margin-left: 6px;\n right: ${t.fileUploaderPaddingXLarge};\n width: 20px;\n `;\n },\n\n iconMultiple() {\n return css`\n position: static;\n `;\n },\n\n contentSmall(t: Theme) {\n return css`\n font-size: ${t.fileUploaderFontSizeSmall};\n `;\n },\n\n contentMedium(t: Theme) {\n return css`\n font-size: ${t.fileUploaderFontSizeMedium};\n `;\n },\n\n contentLarge(t: Theme) {\n return css`\n font-size: ${t.fileUploaderFontSizeLarge};\n `;\n },\n\n deleteIcon(t: Theme) {\n return css`\n color: ${t.fileUploaderIconColor};\n &:hover {\n color: ${t.fileUploaderIconHoverColor};\n }\n `;\n },\n\n focusedIcon(t: Theme) {\n return css`\n outline: 1px solid ${t.borderColorFocus};\n `;\n },\n};\n\nexport const jsStyles = memoizeStyle(styles);\n"]}
@@ -6,6 +6,13 @@ export declare const jsStyles: {
6
6
  name(): string;
7
7
  size(): string;
8
8
  icon(t: Theme): string;
9
+ iconSmall(t: Theme): string;
10
+ iconMedium(t: Theme): string;
11
+ iconLarge(t: Theme): string;
12
+ iconMultiple(): string;
13
+ contentSmall(t: Theme): string;
14
+ contentMedium(t: Theme): string;
15
+ contentLarge(t: Theme): string;
9
16
  deleteIcon(t: Theme): string;
10
17
  focusedIcon(t: Theme): string;
11
18
  };
@@ -2,28 +2,38 @@ import React, { useContext } from 'react';
2
2
  import { FileUploaderControlContext } from "../../FileUploaderControlContext";
3
3
  import { ThemeContext } from "../../../../lib/theming/ThemeContext";
4
4
  import { FileUploaderFile } from "../../FileUploaderFile/FileUploaderFile";
5
+ import { cx } from "../../../../lib/theming/Emotion";
6
+ import { useFileUploaderSize } from "../../hooks/useFileUploaderSize";
5
7
  import { jsStyles } from "../FileUploaderFileList.styles";
6
8
  export var FileUploaderFileDataTids = {
7
9
  fileList: 'FileUploader__fileList'
8
10
  };
9
11
  export var FileUploaderFileList = function FileUploaderFileList(props) {
10
- var renderFile = props.renderFile;
12
+ var renderFile = props.renderFile,
13
+ size = props.size;
11
14
 
12
15
  var _useContext = useContext(FileUploaderControlContext),
13
16
  files = _useContext.files;
14
17
 
15
18
  var theme = useContext(ThemeContext);
19
+ var fileWrapperClass = useFileUploaderSize(size, {
20
+ small: jsStyles.fileWrapperSmall(theme),
21
+ medium: jsStyles.fileWrapperMedium(theme),
22
+ large: jsStyles.fileWrapperLarge(theme)
23
+ });
16
24
  return /*#__PURE__*/React.createElement("div", {
17
25
  "data-tid": FileUploaderFileDataTids.fileList
18
26
  }, files.map(function (file) {
19
27
  return /*#__PURE__*/React.createElement("div", {
20
28
  key: file.id,
21
- className: jsStyles.fileWrapper(theme)
29
+ className: cx(jsStyles.fileWrapper(theme), fileWrapperClass)
22
30
  }, /*#__PURE__*/React.createElement("div", {
23
31
  className: jsStyles.file()
24
32
  }, renderFile(file, /*#__PURE__*/React.createElement(FileUploaderFile, {
25
33
  file: file,
26
- showSize: true
34
+ showSize: true,
35
+ multiple: true,
36
+ size: size
27
37
  }))));
28
38
  }));
29
39
  };
@@ -1 +1 @@
1
- {"version":3,"sources":["FileUploaderFileList.tsx"],"names":["React","useContext","FileUploaderControlContext","ThemeContext","FileUploaderFile","jsStyles","FileUploaderFileDataTids","fileList","FileUploaderFileList","props","renderFile","files","theme","map","file","id","fileWrapper","displayName"],"mappings":"AAAA,OAAOA,KAAP,IAAgBC,UAAhB,QAAkC,OAAlC;;AAEA,SAASC,0BAAT,QAA2C,+BAA3C;AACA,SAASC,YAAT,QAA6B,mCAA7B;AACA,SAASC,gBAAT,QAAiC,sCAAjC;;;AAGA,SAASC,QAAT,QAAyB,+BAAzB;;;;;;AAMA,OAAO,IAAMC,wBAAwB,GAAG;AACtCC,EAAAA,QAAQ,EAAE,wBAD4B,EAAjC;;;AAIP,OAAO,IAAMC,oBAAoB,GAAG,SAAvBA,oBAAuB,CAACC,KAAD,EAAsC;AACxE,MAAQC,UAAR,GAAuBD,KAAvB,CAAQC,UAAR;AACA,oBAAkBT,UAAU,CAACC,0BAAD,CAA5B,CAAQS,KAAR,eAAQA,KAAR;AACA,MAAMC,KAAK,GAAGX,UAAU,CAACE,YAAD,CAAxB;;AAEA;AACE,iCAAK,YAAUG,wBAAwB,CAACC,QAAxC;AACGI,IAAAA,KAAK,CAACE,GAAN,CAAU,UAACC,IAAD;AACT,qCAAK,GAAG,EAAEA,IAAI,CAACC,EAAf,EAAmB,SAAS,EAAEV,QAAQ,CAACW,WAAT,CAAqBJ,KAArB,CAA9B;AACE,qCAAK,SAAS,EAAEP,QAAQ,CAACS,IAAT,EAAhB,IAAkCJ,UAAU,CAACI,IAAD,eAAO,oBAAC,gBAAD,IAAkB,IAAI,EAAEA,IAAxB,EAA8B,QAAQ,MAAtC,GAAP,CAA5C,CADF,CADS,GAAV,CADH,CADF;;;;;AASD,CAdM;;AAgBPN,oBAAoB,CAACS,WAArB,GAAmC,sBAAnC","sourcesContent":["import React, { useContext } from 'react';\n\nimport { FileUploaderControlContext } from '../FileUploaderControlContext';\nimport { ThemeContext } from '../../../lib/theming/ThemeContext';\nimport { FileUploaderFile } from '../FileUploaderFile/FileUploaderFile';\nimport { FileUploaderAttachedFile } from '../fileUtils';\n\nimport { jsStyles } from './FileUploaderFileList.styles';\n\ninterface FileUploaderFileListProps {\n renderFile: (file: FileUploaderAttachedFile, fileNode: React.ReactElement) => React.ReactNode;\n}\n\nexport const FileUploaderFileDataTids = {\n fileList: 'FileUploader__fileList',\n} as const;\n\nexport const FileUploaderFileList = (props: FileUploaderFileListProps) => {\n const { renderFile } = props;\n const { files } = useContext(FileUploaderControlContext);\n const theme = useContext(ThemeContext);\n\n return (\n <div data-tid={FileUploaderFileDataTids.fileList}>\n {files.map((file) => (\n <div key={file.id} className={jsStyles.fileWrapper(theme)}>\n <div className={jsStyles.file()}>{renderFile(file, <FileUploaderFile file={file} showSize />)}</div>\n </div>\n ))}\n </div>\n );\n};\n\nFileUploaderFileList.displayName = 'FileUploaderFileList';\n"]}
1
+ {"version":3,"sources":["FileUploaderFileList.tsx"],"names":["React","useContext","FileUploaderControlContext","ThemeContext","FileUploaderFile","cx","useFileUploaderSize","jsStyles","FileUploaderFileDataTids","fileList","FileUploaderFileList","props","renderFile","size","files","theme","fileWrapperClass","small","fileWrapperSmall","medium","fileWrapperMedium","large","fileWrapperLarge","map","file","id","fileWrapper","displayName"],"mappings":"AAAA,OAAOA,KAAP,IAAgBC,UAAhB,QAAkC,OAAlC;;AAEA,SAASC,0BAAT,QAA2C,+BAA3C;AACA,SAASC,YAAT,QAA6B,mCAA7B;AACA,SAASC,gBAAT,QAAiC,sCAAjC;;;AAGA,SAASC,EAAT,QAAmB,8BAAnB;AACA,SAASC,mBAAT,QAAoC,8BAApC;;AAEA,SAASC,QAAT,QAAyB,+BAAzB;;;;;;;AAOA,OAAO,IAAMC,wBAAwB,GAAG;AACtCC,EAAAA,QAAQ,EAAE,wBAD4B,EAAjC;;;AAIP,OAAO,IAAMC,oBAAoB,GAAG,SAAvBA,oBAAuB,CAACC,KAAD,EAAsC;AACxE,MAAQC,UAAR,GAA6BD,KAA7B,CAAQC,UAAR,CAAoBC,IAApB,GAA6BF,KAA7B,CAAoBE,IAApB;AACA,oBAAkBZ,UAAU,CAACC,0BAAD,CAA5B,CAAQY,KAAR,eAAQA,KAAR;AACA,MAAMC,KAAK,GAAGd,UAAU,CAACE,YAAD,CAAxB;;AAEA,MAAMa,gBAAgB,GAAGV,mBAAmB,CAACO,IAAD,EAAO;AACjDI,IAAAA,KAAK,EAAEV,QAAQ,CAACW,gBAAT,CAA0BH,KAA1B,CAD0C;AAEjDI,IAAAA,MAAM,EAAEZ,QAAQ,CAACa,iBAAT,CAA2BL,KAA3B,CAFyC;AAGjDM,IAAAA,KAAK,EAAEd,QAAQ,CAACe,gBAAT,CAA0BP,KAA1B,CAH0C,EAAP,CAA5C;;;AAMA;AACE,iCAAK,YAAUP,wBAAwB,CAACC,QAAxC;AACGK,IAAAA,KAAK,CAACS,GAAN,CAAU,UAACC,IAAD;AACT,qCAAK,GAAG,EAAEA,IAAI,CAACC,EAAf,EAAmB,SAAS,EAAEpB,EAAE,CAACE,QAAQ,CAACmB,WAAT,CAAqBX,KAArB,CAAD,EAA8BC,gBAA9B,CAAhC;AACE,qCAAK,SAAS,EAAET,QAAQ,CAACiB,IAAT,EAAhB;AACGZ,QAAAA,UAAU,CAACY,IAAD,eAAO,oBAAC,gBAAD,IAAkB,IAAI,EAAEA,IAAxB,EAA8B,QAAQ,MAAtC,EAAuC,QAAQ,MAA/C,EAAgD,IAAI,EAAEX,IAAtD,GAAP,CADb,CADF,CADS,GAAV,CADH,CADF;;;;;;AAWD,CAtBM;;AAwBPH,oBAAoB,CAACiB,WAArB,GAAmC,sBAAnC","sourcesContent":["import React, { useContext } from 'react';\n\nimport { FileUploaderControlContext } from '../FileUploaderControlContext';\nimport { ThemeContext } from '../../../lib/theming/ThemeContext';\nimport { FileUploaderFile } from '../FileUploaderFile/FileUploaderFile';\nimport { FileUploaderAttachedFile } from '../fileUtils';\nimport { FileUploaderSize } from '../../../components/FileUploader';\nimport { cx } from '../../../lib/theming/Emotion';\nimport { useFileUploaderSize } from '../hooks/useFileUploaderSize';\n\nimport { jsStyles } from './FileUploaderFileList.styles';\n\ninterface FileUploaderFileListProps {\n renderFile: (file: FileUploaderAttachedFile, fileNode: React.ReactElement) => React.ReactNode;\n size: FileUploaderSize;\n}\n\nexport const FileUploaderFileDataTids = {\n fileList: 'FileUploader__fileList',\n} as const;\n\nexport const FileUploaderFileList = (props: FileUploaderFileListProps) => {\n const { renderFile, size } = props;\n const { files } = useContext(FileUploaderControlContext);\n const theme = useContext(ThemeContext);\n\n const fileWrapperClass = useFileUploaderSize(size, {\n small: jsStyles.fileWrapperSmall(theme),\n medium: jsStyles.fileWrapperMedium(theme),\n large: jsStyles.fileWrapperLarge(theme),\n });\n\n return (\n <div data-tid={FileUploaderFileDataTids.fileList}>\n {files.map((file) => (\n <div key={file.id} className={cx(jsStyles.fileWrapper(theme), fileWrapperClass)}>\n <div className={jsStyles.file()}>\n {renderFile(file, <FileUploaderFile file={file} showSize multiple size={size} />)}\n </div>\n </div>\n ))}\n </div>\n );\n};\n\nFileUploaderFileList.displayName = 'FileUploaderFileList';\n"]}
@@ -1,7 +1,9 @@
1
1
  import React from 'react';
2
2
  import { FileUploaderAttachedFile } from '../fileUtils';
3
+ import { FileUploaderSize } from '../../../components/FileUploader';
3
4
  interface FileUploaderFileListProps {
4
5
  renderFile: (file: FileUploaderAttachedFile, fileNode: React.ReactElement) => React.ReactNode;
6
+ size: FileUploaderSize;
5
7
  }
6
8
  export declare const FileUploaderFileDataTids: {
7
9
  readonly fileList: "FileUploader__fileList";
@@ -1,6 +1,6 @@
1
1
  import _taggedTemplateLiteralLoose from "@babel/runtime/helpers/esm/taggedTemplateLiteralLoose";
2
2
 
3
- var _templateObject, _templateObject2;
3
+ var _templateObject, _templateObject2, _templateObject3, _templateObject4, _templateObject5;
4
4
 
5
5
  import { css, memoizeStyle } from "../../../../lib/theming/Emotion";
6
6
  var styles = {
@@ -9,6 +9,15 @@ var styles = {
9
9
  },
10
10
  fileWrapper: function fileWrapper(t) {
11
11
  return css(_templateObject2 || (_templateObject2 = _taggedTemplateLiteralLoose(["\n width: 100%;\n height: 32px;\n display: flex;\n align-items: center;\n box-sizing: border-box;\n padding: ", " ", ";\n "])), t.fileUploaderPaddingY, t.fileUploaderPaddingX);
12
+ },
13
+ fileWrapperSmall: function fileWrapperSmall(t) {
14
+ return css(_templateObject3 || (_templateObject3 = _taggedTemplateLiteralLoose(["\n padding: ", " ", ";\n "])), t.fileUploaderPaddingYSmall, t.fileUploaderPaddingXSmall);
15
+ },
16
+ fileWrapperMedium: function fileWrapperMedium(t) {
17
+ return css(_templateObject4 || (_templateObject4 = _taggedTemplateLiteralLoose(["\n padding: ", " ", ";\n "])), t.fileUploaderPaddingYMedium, t.fileUploaderPaddingXMedium);
18
+ },
19
+ fileWrapperLarge: function fileWrapperLarge(t) {
20
+ return css(_templateObject5 || (_templateObject5 = _taggedTemplateLiteralLoose(["\n padding: ", " ", ";\n "])), t.fileUploaderPaddingYLarge, t.fileUploaderPaddingXLarge);
12
21
  }
13
22
  };
14
23
  export var jsStyles = memoizeStyle(styles);
@@ -1 +1 @@
1
- {"version":3,"sources":["FileUploaderFileList.styles.ts"],"names":["css","memoizeStyle","styles","file","fileWrapper","t","fileUploaderPaddingY","fileUploaderPaddingX","jsStyles"],"mappings":"sIAAA,SAASA,GAAT,EAAcC,YAAd,QAAkC,8BAAlC;;;AAGA,IAAMC,MAAM,GAAG;AACbC,EAAAA,IADa,kBACN;AACL,WAAOH,GAAP;;;AAGD,GALY;AAMbI,EAAAA,WANa,uBAMDC,CANC,EAMS;AACpB,WAAOL,GAAP;;;;;;AAMaK,IAAAA,CAAC,CAACC,oBANf,EAMuCD,CAAC,CAACE,oBANzC;;AAQD,GAfY,EAAf;;;AAkBA,OAAO,IAAMC,QAAQ,GAAGP,YAAY,CAACC,MAAD,CAA7B","sourcesContent":["import { css, memoizeStyle } from '../../../lib/theming/Emotion';\nimport { Theme } from '../../../lib/theming/Theme';\n\nconst styles = {\n file() {\n return css`\n width: 100%;\n `;\n },\n fileWrapper(t: Theme) {\n return css`\n width: 100%;\n height: 32px;\n display: flex;\n align-items: center;\n box-sizing: border-box;\n padding: ${t.fileUploaderPaddingY} ${t.fileUploaderPaddingX};\n `;\n },\n};\n\nexport const jsStyles = memoizeStyle(styles);\n"]}
1
+ {"version":3,"sources":["FileUploaderFileList.styles.ts"],"names":["css","memoizeStyle","styles","file","fileWrapper","t","fileUploaderPaddingY","fileUploaderPaddingX","fileWrapperSmall","fileUploaderPaddingYSmall","fileUploaderPaddingXSmall","fileWrapperMedium","fileUploaderPaddingYMedium","fileUploaderPaddingXMedium","fileWrapperLarge","fileUploaderPaddingYLarge","fileUploaderPaddingXLarge","jsStyles"],"mappings":"4LAAA,SAASA,GAAT,EAAcC,YAAd,QAAkC,8BAAlC;;;AAGA,IAAMC,MAAM,GAAG;AACbC,EAAAA,IADa,kBACN;AACL,WAAOH,GAAP;;;AAGD,GALY;AAMbI,EAAAA,WANa,uBAMDC,CANC,EAMS;AACpB,WAAOL,GAAP;;;;;;AAMaK,IAAAA,CAAC,CAACC,oBANf,EAMuCD,CAAC,CAACE,oBANzC;;AAQD,GAfY;;AAiBbC,EAAAA,gBAjBa,4BAiBIH,CAjBJ,EAiBc;AACzB,WAAOL,GAAP;AACaK,IAAAA,CAAC,CAACI,yBADf,EAC4CJ,CAAC,CAACK,yBAD9C;;AAGD,GArBY;;AAuBbC,EAAAA,iBAvBa,6BAuBKN,CAvBL,EAuBe;AAC1B,WAAOL,GAAP;AACaK,IAAAA,CAAC,CAACO,0BADf,EAC6CP,CAAC,CAACQ,0BAD/C;;AAGD,GA3BY;;AA6BbC,EAAAA,gBA7Ba,4BA6BIT,CA7BJ,EA6Bc;AACzB,WAAOL,GAAP;AACaK,IAAAA,CAAC,CAACU,yBADf,EAC4CV,CAAC,CAACW,yBAD9C;;AAGD,GAjCY,EAAf;;;AAoCA,OAAO,IAAMC,QAAQ,GAAGhB,YAAY,CAACC,MAAD,CAA7B","sourcesContent":["import { css, memoizeStyle } from '../../../lib/theming/Emotion';\nimport { Theme } from '../../../lib/theming/Theme';\n\nconst styles = {\n file() {\n return css`\n width: 100%;\n `;\n },\n fileWrapper(t: Theme) {\n return css`\n width: 100%;\n height: 32px;\n display: flex;\n align-items: center;\n box-sizing: border-box;\n padding: ${t.fileUploaderPaddingY} ${t.fileUploaderPaddingX};\n `;\n },\n\n fileWrapperSmall(t: Theme) {\n return css`\n padding: ${t.fileUploaderPaddingYSmall} ${t.fileUploaderPaddingXSmall};\n `;\n },\n\n fileWrapperMedium(t: Theme) {\n return css`\n padding: ${t.fileUploaderPaddingYMedium} ${t.fileUploaderPaddingXMedium};\n `;\n },\n\n fileWrapperLarge(t: Theme) {\n return css`\n padding: ${t.fileUploaderPaddingYLarge} ${t.fileUploaderPaddingXLarge};\n `;\n },\n};\n\nexport const jsStyles = memoizeStyle(styles);\n"]}
@@ -2,4 +2,7 @@ import { Theme } from '../../../lib/theming/Theme';
2
2
  export declare const jsStyles: {
3
3
  file(): string;
4
4
  fileWrapper(t: Theme): string;
5
+ fileWrapperSmall(t: Theme): string;
6
+ fileWrapperMedium(t: Theme): string;
7
+ fileWrapperLarge(t: Theme): string;
5
8
  };
@@ -0,0 +1,6 @@
1
+ {
2
+ "main": "../../../../cjs/internal/FileUploaderControl/hooks/useFileUploaderSize.js",
3
+ "module": "useFileUploaderSize",
4
+ "types": "../useFileUploaderSize.d.ts",
5
+ "sideEffects": false
6
+ }
@@ -0,0 +1,21 @@
1
+ import { useMemo } from 'react';
2
+ export function useFileUploaderSize(size, _ref) {
3
+ var small = _ref.small,
4
+ medium = _ref.medium,
5
+ large = _ref.large;
6
+ return useMemo(function () {
7
+ switch (size) {
8
+ case 'large':
9
+ return large;
10
+
11
+ case 'medium':
12
+ return medium;
13
+
14
+ case 'small':
15
+ return small;
16
+
17
+ default:
18
+ return small;
19
+ }
20
+ }, [size]);
21
+ }
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["useFileUploaderSize.ts"],"names":["useMemo","useFileUploaderSize","size","small","medium","large"],"mappings":"AAAA,SAASA,OAAT,QAAwB,OAAxB;;;;AAIA,OAAO,SAASC,mBAAT,CAAgCC,IAAhC,QAA+G,KAArDC,KAAqD,QAArDA,KAAqD,CAA9CC,MAA8C,QAA9CA,MAA8C,CAAtCC,KAAsC,QAAtCA,KAAsC;AACpH,SAAOL,OAAO,CAAC,YAAM;AACnB,YAAQE,IAAR;AACE,WAAK,OAAL;AACE,eAAOG,KAAP;AACF,WAAK,QAAL;AACE,eAAOD,MAAP;AACF,WAAK,OAAL;AACE,eAAOD,KAAP;AACF;AACE,eAAOA,KAAP,CARJ;;AAUD,GAXa,EAWX,CAACD,IAAD,CAXW,CAAd;AAYD","sourcesContent":["import { useMemo } from 'react';\n\nimport { FileUploaderSize } from '../../../components/FileUploader';\n\nexport function useFileUploaderSize<T>(size: FileUploaderSize, { small, medium, large }: Record<FileUploaderSize, T>) {\n return useMemo(() => {\n switch (size) {\n case 'large':\n return large;\n case 'medium':\n return medium;\n case 'small':\n return small;\n default:\n return small;\n }\n }, [size]);\n}\n"]}
@@ -0,0 +1,2 @@
1
+ import { FileUploaderSize } from '../../../components/FileUploader';
2
+ export declare function useFileUploaderSize<T>(size: FileUploaderSize, { small, medium, large }: Record<FileUploaderSize, T>): T;
@@ -75,7 +75,7 @@ var TRANSITION_TIMEOUT = {
75
75
  };
76
76
  export var PopupPositions = ['top left', 'top center', 'top right', 'right top', 'right middle', 'right bottom', 'bottom right', 'bottom center', 'bottom left', 'left bottom', 'left middle', 'left top'];
77
77
  export var DefaultPosition = PopupPositions[0];
78
- var DUMMY_LOCATION = {
78
+ export var DUMMY_LOCATION = {
79
79
  position: DefaultPosition,
80
80
  coordinates: {
81
81
  top: -9999,
@@ -206,6 +206,10 @@ export var Popup = responsiveLayout(_class = rootNode(_class = (_temp = _class2
206
206
 
207
207
  var location = _this.getLocation(popupElement, _this.state.location);
208
208
 
209
+ if (location) {
210
+ _this.props.onPositionChange == null ? void 0 : _this.props.onPositionChange(location == null ? void 0 : location.position);
211
+ }
212
+
209
213
  if (!_this.locationEquals(_this.state.location, location)) {
210
214
  _this.setState({
211
215
  location: location