@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.
- package/CHANGELOG.md +36 -0
- package/cjs/components/ComboBox/ComboBox.d.ts +15 -0
- package/cjs/components/ComboBox/ComboBox.js +16 -0
- package/cjs/components/ComboBox/ComboBox.js.map +1 -1
- package/cjs/components/ComboBox/ComboBox.md +10 -1
- package/cjs/components/DropdownMenu/DropdownMenu.md +11 -9
- package/cjs/components/FileUploader/FileUploader.d.ts +9 -1
- package/cjs/components/FileUploader/FileUploader.js +67 -18
- package/cjs/components/FileUploader/FileUploader.js.map +1 -1
- package/cjs/components/FileUploader/FileUploader.mixins.d.ts +1 -0
- package/cjs/components/FileUploader/FileUploader.mixins.js +10 -0
- package/cjs/components/FileUploader/FileUploader.mixins.js.map +1 -0
- package/cjs/components/FileUploader/FileUploader.styles.d.ts +12 -1
- package/cjs/components/FileUploader/FileUploader.styles.js +119 -22
- package/cjs/components/FileUploader/FileUploader.styles.js.map +1 -1
- package/cjs/components/Hint/Hint.d.ts +1 -0
- package/cjs/components/Hint/Hint.js +6 -2
- package/cjs/components/Hint/Hint.js.map +1 -1
- package/cjs/components/Paging/Paging.js +20 -15
- package/cjs/components/Paging/Paging.js.map +1 -1
- package/cjs/components/Paging/Paging.md +13 -0
- package/cjs/components/Paging/Paging.styles.d.ts +6 -2
- package/cjs/components/Paging/Paging.styles.js +40 -15
- package/cjs/components/Paging/Paging.styles.js.map +1 -1
- package/cjs/components/Select/Select.js +5 -3
- package/cjs/components/Select/Select.js.map +1 -1
- package/cjs/components/SidePage/SidePage.d.ts +0 -1
- package/cjs/components/SidePage/SidePage.js +0 -2
- package/cjs/components/SidePage/SidePage.js.map +1 -1
- package/cjs/components/SidePage/SidePageBody.d.ts +0 -1
- package/cjs/components/SidePage/SidePageBody.js +6 -11
- package/cjs/components/SidePage/SidePageBody.js.map +1 -1
- package/cjs/components/Toggle/Toggle.js +2 -1
- package/cjs/components/Toggle/Toggle.js.map +1 -1
- package/cjs/internal/CustomComboBox/ComboBoxMenu.d.ts +1 -0
- package/cjs/internal/CustomComboBox/ComboBoxMenu.js +3 -1
- package/cjs/internal/CustomComboBox/ComboBoxMenu.js.map +1 -1
- package/cjs/internal/CustomComboBox/ComboBoxView.d.ts +1 -0
- package/cjs/internal/CustomComboBox/ComboBoxView.js +3 -1
- package/cjs/internal/CustomComboBox/ComboBoxView.js.map +1 -1
- package/cjs/internal/CustomComboBox/CustomComboBox.d.ts +1 -0
- package/cjs/internal/CustomComboBox/CustomComboBox.js +3 -1
- package/cjs/internal/CustomComboBox/CustomComboBox.js.map +1 -1
- package/cjs/internal/CustomComboBox/CustomComboBoxReducer.js +4 -1
- package/cjs/internal/CustomComboBox/CustomComboBoxReducer.js.map +1 -1
- package/cjs/internal/FileUploaderControl/FileUploaderControlContext.d.ts +2 -0
- package/cjs/internal/FileUploaderControl/FileUploaderControlContext.js +2 -0
- package/cjs/internal/FileUploaderControl/FileUploaderControlContext.js.map +1 -1
- package/cjs/internal/FileUploaderControl/FileUploaderControlProvider.js +4 -1
- package/cjs/internal/FileUploaderControl/FileUploaderControlProvider.js.map +1 -1
- package/cjs/internal/FileUploaderControl/FileUploaderFile/FileUploaderFile.d.ts +3 -0
- package/cjs/internal/FileUploaderControl/FileUploaderFile/FileUploaderFile.js +46 -11
- package/cjs/internal/FileUploaderControl/FileUploaderFile/FileUploaderFile.js.map +1 -1
- package/cjs/internal/FileUploaderControl/FileUploaderFile/FileUploaderFile.styles.d.ts +7 -0
- package/cjs/internal/FileUploaderControl/FileUploaderFile/FileUploaderFile.styles.js +54 -7
- package/cjs/internal/FileUploaderControl/FileUploaderFile/FileUploaderFile.styles.js.map +1 -1
- package/cjs/internal/FileUploaderControl/FileUploaderFileList/FileUploaderFileList.d.ts +2 -0
- package/cjs/internal/FileUploaderControl/FileUploaderFileList/FileUploaderFileList.js +15 -3
- package/cjs/internal/FileUploaderControl/FileUploaderFileList/FileUploaderFileList.js.map +1 -1
- package/cjs/internal/FileUploaderControl/FileUploaderFileList/FileUploaderFileList.styles.d.ts +3 -0
- package/cjs/internal/FileUploaderControl/FileUploaderFileList/FileUploaderFileList.styles.js +19 -1
- package/cjs/internal/FileUploaderControl/FileUploaderFileList/FileUploaderFileList.styles.js.map +1 -1
- package/cjs/internal/FileUploaderControl/hooks/useFileUploaderSize.d.ts +2 -0
- package/cjs/internal/FileUploaderControl/hooks/useFileUploaderSize.js +18 -0
- package/cjs/internal/FileUploaderControl/hooks/useFileUploaderSize.js.map +1 -0
- package/cjs/internal/Popup/Popup.d.ts +5 -0
- package/cjs/internal/Popup/Popup.js +10 -2
- package/cjs/internal/Popup/Popup.js.map +1 -1
- package/cjs/internal/ThemeShowcase/VariablesCollector.d.ts +1 -1
- package/cjs/internal/themes/DarkTheme.d.ts +1 -0
- package/cjs/internal/themes/DarkTheme.js +2 -1
- package/cjs/internal/themes/DarkTheme.js.map +1 -1
- package/cjs/internal/themes/DefaultTheme.d.ts +16 -0
- package/cjs/internal/themes/DefaultTheme.js +41 -1
- package/cjs/internal/themes/DefaultTheme.js.map +1 -1
- package/cjs/lib/utils.d.ts +2 -3
- package/cjs/lib/utils.js +1 -2
- package/cjs/lib/utils.js.map +1 -1
- package/components/ComboBox/ComboBox/ComboBox.js.map +1 -1
- package/components/ComboBox/ComboBox.d.ts +15 -0
- package/components/ComboBox/ComboBox.md +10 -1
- package/components/DropdownMenu/DropdownMenu.md +11 -9
- package/components/FileUploader/FileUploader/FileUploader.js +56 -20
- package/components/FileUploader/FileUploader/FileUploader.js.map +1 -1
- package/components/FileUploader/FileUploader.d.ts +9 -1
- package/components/FileUploader/FileUploader.mixins/FileUploader.mixins.js +8 -0
- package/components/FileUploader/FileUploader.mixins/FileUploader.mixins.js.map +1 -0
- package/components/FileUploader/FileUploader.mixins/package.json +6 -0
- package/components/FileUploader/FileUploader.mixins.d.ts +1 -0
- package/components/FileUploader/FileUploader.styles/FileUploader.styles.js +51 -17
- package/components/FileUploader/FileUploader.styles/FileUploader.styles.js.map +1 -1
- package/components/FileUploader/FileUploader.styles.d.ts +12 -1
- package/components/Hint/Hint/Hint.js +13 -5
- package/components/Hint/Hint/Hint.js.map +1 -1
- package/components/Hint/Hint.d.ts +1 -0
- package/components/Paging/Paging/Paging.js +12 -9
- package/components/Paging/Paging/Paging.js.map +1 -1
- package/components/Paging/Paging.md +13 -0
- package/components/Paging/Paging.styles/Paging.styles.js +27 -15
- package/components/Paging/Paging.styles/Paging.styles.js.map +1 -1
- package/components/Paging/Paging.styles.d.ts +6 -2
- package/components/Select/Select/Select.js +5 -5
- package/components/Select/Select/Select.js.map +1 -1
- package/components/SidePage/SidePage/SidePage.js +0 -1
- package/components/SidePage/SidePage/SidePage.js.map +1 -1
- package/components/SidePage/SidePage.d.ts +0 -1
- package/components/SidePage/SidePageBody/SidePageBody.js +1 -9
- package/components/SidePage/SidePageBody/SidePageBody.js.map +1 -1
- package/components/SidePage/SidePageBody.d.ts +0 -1
- package/components/Toggle/Toggle/Toggle.js +2 -1
- package/components/Toggle/Toggle/Toggle.js.map +1 -1
- package/internal/CustomComboBox/ComboBoxMenu/ComboBoxMenu.js +3 -1
- package/internal/CustomComboBox/ComboBoxMenu/ComboBoxMenu.js.map +1 -1
- package/internal/CustomComboBox/ComboBoxMenu.d.ts +1 -0
- package/internal/CustomComboBox/ComboBoxView/ComboBoxView.js +3 -1
- package/internal/CustomComboBox/ComboBoxView/ComboBoxView.js.map +1 -1
- package/internal/CustomComboBox/ComboBoxView.d.ts +1 -0
- package/internal/CustomComboBox/CustomComboBox/CustomComboBox.js +1 -0
- package/internal/CustomComboBox/CustomComboBox/CustomComboBox.js.map +1 -1
- package/internal/CustomComboBox/CustomComboBox.d.ts +1 -0
- package/internal/CustomComboBox/CustomComboBoxReducer/CustomComboBoxReducer.js +5 -1
- package/internal/CustomComboBox/CustomComboBoxReducer/CustomComboBoxReducer.js.map +1 -1
- package/internal/FileUploaderControl/FileUploaderControlContext/FileUploaderControlContext.js.map +1 -1
- package/internal/FileUploaderControl/FileUploaderControlContext.d.ts +2 -0
- package/internal/FileUploaderControl/FileUploaderControlProvider/FileUploaderControlProvider.js +7 -1
- package/internal/FileUploaderControl/FileUploaderControlProvider/FileUploaderControlProvider.js.map +1 -1
- package/internal/FileUploaderControl/FileUploaderFile/FileUploaderFile/FileUploaderFile.js +38 -13
- package/internal/FileUploaderControl/FileUploaderFile/FileUploaderFile/FileUploaderFile.js.map +1 -1
- package/internal/FileUploaderControl/FileUploaderFile/FileUploaderFile.d.ts +3 -0
- package/internal/FileUploaderControl/FileUploaderFile/FileUploaderFile.styles/FileUploaderFile.styles.js +26 -5
- package/internal/FileUploaderControl/FileUploaderFile/FileUploaderFile.styles/FileUploaderFile.styles.js.map +1 -1
- package/internal/FileUploaderControl/FileUploaderFile/FileUploaderFile.styles.d.ts +7 -0
- package/internal/FileUploaderControl/FileUploaderFileList/FileUploaderFileList/FileUploaderFileList.js +13 -3
- package/internal/FileUploaderControl/FileUploaderFileList/FileUploaderFileList/FileUploaderFileList.js.map +1 -1
- package/internal/FileUploaderControl/FileUploaderFileList/FileUploaderFileList.d.ts +2 -0
- package/internal/FileUploaderControl/FileUploaderFileList/FileUploaderFileList.styles/FileUploaderFileList.styles.js +10 -1
- package/internal/FileUploaderControl/FileUploaderFileList/FileUploaderFileList.styles/FileUploaderFileList.styles.js.map +1 -1
- package/internal/FileUploaderControl/FileUploaderFileList/FileUploaderFileList.styles.d.ts +3 -0
- package/internal/FileUploaderControl/hooks/useFileUploaderSize/package.json +6 -0
- package/internal/FileUploaderControl/hooks/useFileUploaderSize/useFileUploaderSize.js +21 -0
- package/internal/FileUploaderControl/hooks/useFileUploaderSize/useFileUploaderSize.js.map +1 -0
- package/internal/FileUploaderControl/hooks/useFileUploaderSize.d.ts +2 -0
- package/internal/Popup/Popup/Popup.js +5 -1
- package/internal/Popup/Popup/Popup.js.map +1 -1
- package/internal/Popup/Popup.d.ts +5 -0
- package/internal/ThemeShowcase/VariablesCollector.d.ts +1 -1
- package/internal/themes/DarkTheme/DarkTheme.js +1 -0
- package/internal/themes/DarkTheme/DarkTheme.js.map +1 -1
- package/internal/themes/DarkTheme.d.ts +1 -0
- package/internal/themes/DefaultTheme/DefaultTheme.js +64 -0
- package/internal/themes/DefaultTheme/DefaultTheme.js.map +1 -1
- package/internal/themes/DefaultTheme.d.ts +16 -0
- package/lib/utils/utils.js.map +1 -1
- package/lib/utils.d.ts +2 -3
- package/package.json +2 -2
package/internal/FileUploaderControl/FileUploaderControlProvider/FileUploaderControlProvider.js
CHANGED
|
@@ -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
|
};
|
package/internal/FileUploaderControl/FileUploaderControlProvider/FileUploaderControlProvider.js.map
CHANGED
|
@@ -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":"0DAAA,OAAOA,KAAP,IAAmCC,WAAnC,EAAgDC,QAAhD,QAAgE,OAAhE;;AAEA,SAASC,aAAT,QAA8B,2BAA9B;AACA,SAASC,wBAAT,QAAyC,sCAAzC;;AAEA,SAAmCC,sBAAnC,QAAiE,aAAjE;AACA,SAASC,0BAAT,QAA2C,8BAA3C;AACA,SAASC,gBAAT,QAAiC,0BAAjC;AACA,SAASC,gCAAT,QAAiD,oCAAjD;;;;;;;;;;;AAWA,IAAMC,UAAU,GAAG,SAAbA,UAAa;AACjBC,KADiB;AAEjBC,MAFiB;AAGjBC,mBAHiB;AAIc;AAC/B,MAAMC,SAAS,GAAGH,KAAK,CAACI,SAAN,CAAgB,UAACC,IAAD,UAAUA,IAAI,CAACC,EAAL,KAAYL,MAAtB,EAAhB,CAAlB;AACA,MAAIE,SAAS,KAAK,CAAC,CAAnB,EAAsB;AACpB,WAAOH,KAAP;AACD;;AAED,MAAMO,QAAQ,aAAOP,KAAP,CAAd;AACA,MAAMK,IAAI,GAAGL,KAAK,CAACG,SAAD,CAAlB;;AAEA,MAAMK,YAAY,GAAGN,mBAAmB,CAACG,IAAD,CAAxC;;AAEAE,EAAAA,QAAQ,CAACJ,SAAD,CAAR;AACKE,EAAAA,IADL;AAEKG,EAAAA,YAFL;;;AAKA,SAAOD,QAAP;AACD,CArBD;;AAuBA,OAAO,IAAME,2BAA2B,GAAG,SAA9BA,2BAA8B,CAACC,KAAD,EAAgE;AACzG,MAAQC,QAAR,GAAwDD,KAAxD,CAAQC,QAAR,CAAkBC,aAAlB,GAAwDF,KAAxD,CAAkBE,aAAlB,CAAiCC,QAAjC,GAAwDH,KAAxD,CAAiCG,QAAjC,CAA2CC,QAA3C,GAAwDJ,KAAxD,CAA2CI,QAA3C;;AAEA,kBAA0BtB,QAAQ,CAA6B,EAA7B,CAAlC,CAAOQ,KAAP,gBAAce,QAAd;AACA,MAAMC,MAAM,
|
|
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
|
-
|
|
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(
|
|
73
|
-
}, [
|
|
74
|
-
|
|
86
|
+
return formatBytes(fileSize, 1);
|
|
87
|
+
}, [fileSize]);
|
|
75
88
|
useEffect(function () {
|
|
76
|
-
var
|
|
89
|
+
var _truncatedName$length;
|
|
77
90
|
|
|
78
|
-
var
|
|
79
|
-
|
|
80
|
-
|
|
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
|
-
}
|
|
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
|
|
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,
|
package/internal/FileUploaderControl/FileUploaderFile/FileUploaderFile/FileUploaderFile.js.map
CHANGED
|
@@ -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
|
|
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
|
|
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(
|
|
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(
|
|
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":"
|
|
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
|
|
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":"
|
|
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"]}
|
|
@@ -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"]}
|
|
@@ -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
|