@skbkontur/react-ui 6.0.0-beta.2 → 6.0.0-beta.3
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 +34 -0
- package/components/Calendar/Calendar.js +1 -27
- package/components/Calendar/Calendar.js.map +1 -1
- package/components/Calendar/CalendarDay.js +1 -1
- package/components/Calendar/CalendarDay.js.map +1 -1
- package/components/CurrencyInput/CurrencyInput.js +3 -18
- package/components/CurrencyInput/CurrencyInput.js.map +1 -1
- package/components/Dropdown/Dropdown.d.ts +18 -19
- package/components/Dropdown/Dropdown.js +2 -2
- package/components/Dropdown/Dropdown.js.map +1 -1
- package/components/FileUploader/FileUploader.d.ts +4 -4
- package/components/FileUploader/FileUploader.js +10 -10
- package/components/FileUploader/FileUploader.js.map +1 -1
- package/components/FileUploader/FileUploaderControlContext.js.map +1 -0
- package/{internal/FileUploaderControl → components/FileUploader}/FileUploaderControlProvider.d.ts +0 -4
- package/components/FileUploader/FileUploaderControlProvider.js.map +1 -0
- package/components/FileUploader/FileUploaderFile.d.ts +1 -1
- package/components/FileUploader/FileUploaderFile.js +5 -5
- package/components/FileUploader/FileUploaderFile.js.map +1 -1
- package/{internal/FileUploaderControl/FileUploaderFile → components/FileUploader}/FileUploaderFile.styles.d.ts +4 -4
- package/{internal/FileUploaderControl/FileUploaderFile → components/FileUploader}/FileUploaderFile.styles.js +1 -1
- package/components/FileUploader/FileUploaderFile.styles.js.map +1 -0
- package/{internal/FileUploaderControl → components/FileUploader}/FileUploaderFileList/FileUploaderFileList.d.ts +4 -6
- package/{internal/FileUploaderControl → components/FileUploader}/FileUploaderFileList/FileUploaderFileList.js +3 -4
- package/components/FileUploader/FileUploaderFileList/FileUploaderFileList.js.map +1 -0
- package/components/FileUploader/FileUploaderFileList/FileUploaderFileList.styles.js.map +1 -0
- package/{internal/FileUploaderControl/FileUploaderFile/icons → components/FileUploader}/FileUploaderFileStatusIcon.d.ts +2 -2
- package/{internal/FileUploaderControl/FileUploaderFile/icons → components/FileUploader}/FileUploaderFileStatusIcon.js +11 -12
- package/components/FileUploader/FileUploaderFileStatusIcon.js.map +1 -0
- package/{internal/FileUploaderControl/FileUploaderFile/icons → components/FileUploader}/FileUploaderFileTypeIcon.d.ts +2 -2
- package/{internal/FileUploaderControl/FileUploaderFile/icons → components/FileUploader}/FileUploaderFileTypeIcon.js +23 -23
- package/components/FileUploader/FileUploaderFileTypeIcon.js.map +1 -0
- package/components/FileUploader/FileUploaderFileValidationResult.js.map +1 -0
- package/components/FileUploader/fileUtils.js.map +1 -0
- package/components/FileUploader/hooks/useControlLocale.d.ts +2 -0
- package/components/FileUploader/hooks/useControlLocale.js +6 -0
- package/components/FileUploader/hooks/useControlLocale.js.map +1 -0
- package/components/FileUploader/hooks/useFileUploaderSize.js.map +1 -0
- package/{internal/FileUploaderControl → components/FileUploader}/hooks/useUpload.d.ts +1 -1
- package/components/FileUploader/hooks/useUpload.js.map +1 -0
- package/components/FileUploader/icons/{TileUploadIcon.d.ts → DeleteIcon.d.ts} +1 -1
- package/components/FileUploader/icons/DeleteIcon.js +11 -0
- package/components/FileUploader/icons/DeleteIcon.js.map +1 -0
- package/components/FileUploader/{UploadIcon.d.ts → icons/UploadIcon.d.ts} +2 -2
- package/components/FileUploader/{UploadIcon.js → icons/UploadIcon.js} +2 -2
- package/components/FileUploader/icons/UploadIcon.js.map +1 -0
- package/components/FileUploader/icons/row/ArchiveIcon.d.ts +3 -0
- package/components/FileUploader/icons/row/ArchiveIcon.js +11 -0
- package/components/FileUploader/icons/row/ArchiveIcon.js.map +1 -0
- package/components/FileUploader/icons/row/DocTextIcon.d.ts +3 -0
- package/components/FileUploader/icons/row/DocTextIcon.js +11 -0
- package/components/FileUploader/icons/row/DocTextIcon.js.map +1 -0
- package/components/FileUploader/icons/row/FolderIcon.d.ts +3 -0
- package/components/FileUploader/icons/row/FolderIcon.js +11 -0
- package/components/FileUploader/icons/row/FolderIcon.js.map +1 -0
- package/components/FileUploader/icons/row/MarkupIcon.d.ts +3 -0
- package/components/FileUploader/icons/row/MarkupIcon.js +11 -0
- package/components/FileUploader/icons/row/MarkupIcon.js.map +1 -0
- package/components/FileUploader/icons/row/PdfIcon.d.ts +3 -0
- package/components/FileUploader/icons/row/PdfIcon.js +11 -0
- package/components/FileUploader/icons/row/PdfIcon.js.map +1 -0
- package/components/FileUploader/icons/row/PictureIcon.d.ts +3 -0
- package/components/FileUploader/icons/row/PictureIcon.js +11 -0
- package/components/FileUploader/icons/row/PictureIcon.js.map +1 -0
- package/components/FileUploader/icons/row/PresentationIcon.d.ts +3 -0
- package/components/FileUploader/icons/row/PresentationIcon.js +11 -0
- package/components/FileUploader/icons/row/PresentationIcon.js.map +1 -0
- package/components/FileUploader/icons/row/RowUploadIcon.d.ts +3 -0
- package/components/FileUploader/icons/row/RowUploadIcon.js +11 -0
- package/components/FileUploader/icons/row/RowUploadIcon.js.map +1 -0
- package/components/FileUploader/icons/row/TableIcon.d.ts +3 -0
- package/components/FileUploader/icons/row/TableIcon.js +11 -0
- package/components/FileUploader/icons/row/TableIcon.js.map +1 -0
- package/components/FileUploader/icons/row/TextIcon.d.ts +3 -0
- package/components/FileUploader/icons/row/TextIcon.js +11 -0
- package/components/FileUploader/icons/row/TextIcon.js.map +1 -0
- package/components/FileUploader/icons/row/ValidationErrorIcon.d.ts +3 -0
- package/components/FileUploader/icons/row/ValidationErrorIcon.js +11 -0
- package/components/FileUploader/icons/row/ValidationErrorIcon.js.map +1 -0
- package/components/FileUploader/icons/row/ValidationWarningIcon.d.ts +3 -0
- package/components/FileUploader/icons/row/ValidationWarningIcon.js +11 -0
- package/components/FileUploader/icons/row/ValidationWarningIcon.js.map +1 -0
- package/components/FileUploader/icons/tile/ArchiveIcon.d.ts +3 -0
- package/components/FileUploader/icons/tile/ArchiveIcon.js +11 -0
- package/components/FileUploader/icons/tile/ArchiveIcon.js.map +1 -0
- package/components/FileUploader/icons/tile/DocTextIcon.d.ts +3 -0
- package/components/FileUploader/icons/tile/DocTextIcon.js +11 -0
- package/components/FileUploader/icons/tile/DocTextIcon.js.map +1 -0
- package/components/FileUploader/icons/tile/FolderIcon.d.ts +3 -0
- package/components/FileUploader/icons/tile/FolderIcon.js +11 -0
- package/components/FileUploader/icons/tile/FolderIcon.js.map +1 -0
- package/components/FileUploader/icons/tile/MarkupIcon.d.ts +3 -0
- package/components/FileUploader/icons/tile/MarkupIcon.js +11 -0
- package/components/FileUploader/icons/tile/MarkupIcon.js.map +1 -0
- package/components/FileUploader/icons/tile/PdfIcon.d.ts +3 -0
- package/components/FileUploader/icons/tile/PdfIcon.js +11 -0
- package/components/FileUploader/icons/tile/PdfIcon.js.map +1 -0
- package/components/FileUploader/icons/tile/PictureIcon.d.ts +3 -0
- package/components/FileUploader/icons/tile/PictureIcon.js +11 -0
- package/components/FileUploader/icons/tile/PictureIcon.js.map +1 -0
- package/components/FileUploader/icons/tile/PresentationIcon.d.ts +3 -0
- package/components/FileUploader/icons/tile/PresentationIcon.js +11 -0
- package/components/FileUploader/icons/tile/PresentationIcon.js.map +1 -0
- package/components/FileUploader/icons/tile/TableIcon.d.ts +3 -0
- package/components/FileUploader/icons/tile/TableIcon.js +11 -0
- package/components/FileUploader/icons/tile/TableIcon.js.map +1 -0
- package/components/FileUploader/icons/tile/TextIcon.d.ts +3 -0
- package/components/FileUploader/icons/tile/TextIcon.js +11 -0
- package/components/FileUploader/icons/tile/TextIcon.js.map +1 -0
- package/components/FileUploader/icons/tile/TileUploadIcon.d.ts +3 -0
- package/components/FileUploader/icons/tile/TileUploadIcon.js +11 -0
- package/components/FileUploader/icons/tile/TileUploadIcon.js.map +1 -0
- package/components/FileUploader/icons/tile/ValidationErrorIcon.d.ts +3 -0
- package/components/FileUploader/icons/tile/ValidationErrorIcon.js +11 -0
- package/components/FileUploader/icons/tile/ValidationErrorIcon.js.map +1 -0
- package/components/FileUploader/icons/tile/ValidationWarningIcon.d.ts +3 -0
- package/components/FileUploader/icons/tile/ValidationWarningIcon.js +11 -0
- package/components/FileUploader/icons/tile/ValidationWarningIcon.js.map +1 -0
- package/components/FileUploader/index.d.ts +3 -3
- package/components/FileUploader/index.js +2 -2
- package/components/FileUploader/index.js.map +1 -1
- package/components/FileUploader/withFileUploaderControlProvider.js.map +1 -0
- package/components/FxInput/FxInput.js +3 -1
- package/components/FxInput/FxInput.js.map +1 -1
- package/components/GlobalLoader/GlobalLoader.d.ts +20 -23
- package/components/GlobalLoader/GlobalLoader.js +10 -13
- package/components/GlobalLoader/GlobalLoader.js.map +1 -1
- package/components/Kebab/Kebab.d.ts +10 -11
- package/components/Kebab/Kebab.js +1 -1
- package/components/Kebab/Kebab.js.map +1 -1
- package/components/Loader/Loader.d.ts +9 -9
- package/components/Loader/Loader.js +3 -3
- package/components/Loader/Loader.js.map +1 -1
- package/components/MaskedInput/FixedIMaskInput.js +11 -0
- package/components/MaskedInput/FixedIMaskInput.js.map +1 -1
- package/components/Paging/Paging.d.ts +23 -22
- package/components/Paging/Paging.js.map +1 -1
- package/components/Spinner/Spinner.d.ts +28 -16
- package/components/Spinner/Spinner.js +0 -5
- package/components/Spinner/Spinner.js.map +1 -1
- package/components/Tabs/Indicator.styles.d.ts +1 -0
- package/components/Tabs/Indicator.styles.js +4 -1
- package/components/Tabs/Indicator.styles.js.map +1 -1
- package/components/Tabs/Tab.d.ts +11 -10
- package/components/Tabs/Tab.js +3 -1
- package/components/Tabs/Tab.js.map +1 -1
- package/components/Tabs/Tabs.d.ts +7 -12
- package/components/Tabs/Tabs.js +1 -6
- package/components/Tabs/Tabs.js.map +1 -1
- package/components/Textarea/Textarea.styles.js +1 -1
- package/components/Textarea/Textarea.styles.js.map +1 -1
- package/components/Toast/Toast.d.ts +3 -3
- package/components/Toast/Toast.js.map +1 -1
- package/components/Tooltip/Tooltip.d.ts +1 -1
- package/components/Tooltip/Tooltip.js.map +1 -1
- package/internal/Menu/Menu.d.ts +1 -2
- package/internal/Menu/Menu.js.map +1 -1
- package/internal/PopupMenu/PopupMenu.d.ts +3 -7
- package/internal/PopupMenu/PopupMenu.js.map +1 -1
- package/internal/RenderContainer/RenderContainer.d.ts +3 -0
- package/internal/RenderContainer/RenderContainer.js +4 -1
- package/internal/RenderContainer/RenderContainer.js.map +1 -1
- package/internal/themes/BasicTheme.d.ts +1 -0
- package/internal/themes/BasicTheme.js +1 -0
- package/internal/themes/BasicTheme.js.map +1 -1
- package/lib/rootNode/getRootNode.js +0 -24
- package/lib/rootNode/getRootNode.js.map +1 -1
- package/lib/scrollInputCaretIntoView.d.ts +14 -0
- package/lib/scrollInputCaretIntoView.js +38 -0
- package/lib/scrollInputCaretIntoView.js.map +1 -0
- package/lib/utils.js +2 -2
- package/lib/utils.js.map +1 -1
- package/package.json +2 -3
- package/components/FileUploader/UploadIcon.js.map +0 -1
- package/components/FileUploader/icons/RowUploadIcon.d.ts +0 -3
- package/components/FileUploader/icons/RowUploadIcon.js +0 -11
- package/components/FileUploader/icons/RowUploadIcon.js.map +0 -1
- package/components/FileUploader/icons/TileUploadIcon.js +0 -11
- package/components/FileUploader/icons/TileUploadIcon.js.map +0 -1
- package/internal/FileUploaderControl/FileUploaderControlContext.js.map +0 -1
- package/internal/FileUploaderControl/FileUploaderControlProvider.js.map +0 -1
- package/internal/FileUploaderControl/FileUploaderFile/FileUploaderFile.d.ts +0 -1
- package/internal/FileUploaderControl/FileUploaderFile/FileUploaderFile.js +0 -2
- package/internal/FileUploaderControl/FileUploaderFile/FileUploaderFile.js.map +0 -1
- package/internal/FileUploaderControl/FileUploaderFile/FileUploaderFile.styles.js.map +0 -1
- package/internal/FileUploaderControl/FileUploaderFile/icons/DeleteIcon.d.ts +0 -3
- package/internal/FileUploaderControl/FileUploaderFile/icons/DeleteIcon.js +0 -11
- package/internal/FileUploaderControl/FileUploaderFile/icons/DeleteIcon.js.map +0 -1
- package/internal/FileUploaderControl/FileUploaderFile/icons/FileUploaderFileStatusIcon.js.map +0 -1
- package/internal/FileUploaderControl/FileUploaderFile/icons/FileUploaderFileTypeIcon.js.map +0 -1
- package/internal/FileUploaderControl/FileUploaderFile/icons/row/ArchiveIcon.d.ts +0 -3
- package/internal/FileUploaderControl/FileUploaderFile/icons/row/ArchiveIcon.js +0 -11
- package/internal/FileUploaderControl/FileUploaderFile/icons/row/ArchiveIcon.js.map +0 -1
- package/internal/FileUploaderControl/FileUploaderFile/icons/row/DocTextIcon.d.ts +0 -3
- package/internal/FileUploaderControl/FileUploaderFile/icons/row/DocTextIcon.js +0 -11
- package/internal/FileUploaderControl/FileUploaderFile/icons/row/DocTextIcon.js.map +0 -1
- package/internal/FileUploaderControl/FileUploaderFile/icons/row/FolderIcon.d.ts +0 -3
- package/internal/FileUploaderControl/FileUploaderFile/icons/row/FolderIcon.js +0 -11
- package/internal/FileUploaderControl/FileUploaderFile/icons/row/FolderIcon.js.map +0 -1
- package/internal/FileUploaderControl/FileUploaderFile/icons/row/MarkupIcon.d.ts +0 -3
- package/internal/FileUploaderControl/FileUploaderFile/icons/row/MarkupIcon.js +0 -11
- package/internal/FileUploaderControl/FileUploaderFile/icons/row/MarkupIcon.js.map +0 -1
- package/internal/FileUploaderControl/FileUploaderFile/icons/row/PdfIcon.d.ts +0 -3
- package/internal/FileUploaderControl/FileUploaderFile/icons/row/PdfIcon.js +0 -11
- package/internal/FileUploaderControl/FileUploaderFile/icons/row/PdfIcon.js.map +0 -1
- package/internal/FileUploaderControl/FileUploaderFile/icons/row/PictureIcon.d.ts +0 -3
- package/internal/FileUploaderControl/FileUploaderFile/icons/row/PictureIcon.js +0 -11
- package/internal/FileUploaderControl/FileUploaderFile/icons/row/PictureIcon.js.map +0 -1
- package/internal/FileUploaderControl/FileUploaderFile/icons/row/PresentationIcon.d.ts +0 -3
- package/internal/FileUploaderControl/FileUploaderFile/icons/row/PresentationIcon.js +0 -11
- package/internal/FileUploaderControl/FileUploaderFile/icons/row/PresentationIcon.js.map +0 -1
- package/internal/FileUploaderControl/FileUploaderFile/icons/row/TableIcon.d.ts +0 -3
- package/internal/FileUploaderControl/FileUploaderFile/icons/row/TableIcon.js +0 -11
- package/internal/FileUploaderControl/FileUploaderFile/icons/row/TableIcon.js.map +0 -1
- package/internal/FileUploaderControl/FileUploaderFile/icons/row/TextIcon.d.ts +0 -3
- package/internal/FileUploaderControl/FileUploaderFile/icons/row/TextIcon.js +0 -11
- package/internal/FileUploaderControl/FileUploaderFile/icons/row/TextIcon.js.map +0 -1
- package/internal/FileUploaderControl/FileUploaderFile/icons/row/ValidationErrorIcon.d.ts +0 -3
- package/internal/FileUploaderControl/FileUploaderFile/icons/row/ValidationErrorIcon.js +0 -11
- package/internal/FileUploaderControl/FileUploaderFile/icons/row/ValidationErrorIcon.js.map +0 -1
- package/internal/FileUploaderControl/FileUploaderFile/icons/row/ValidationWarningIcon.d.ts +0 -3
- package/internal/FileUploaderControl/FileUploaderFile/icons/row/ValidationWarningIcon.js +0 -11
- package/internal/FileUploaderControl/FileUploaderFile/icons/row/ValidationWarningIcon.js.map +0 -1
- package/internal/FileUploaderControl/FileUploaderFile/icons/tile/ArchiveIcon.d.ts +0 -3
- package/internal/FileUploaderControl/FileUploaderFile/icons/tile/ArchiveIcon.js +0 -11
- package/internal/FileUploaderControl/FileUploaderFile/icons/tile/ArchiveIcon.js.map +0 -1
- package/internal/FileUploaderControl/FileUploaderFile/icons/tile/DocTextIcon.d.ts +0 -3
- package/internal/FileUploaderControl/FileUploaderFile/icons/tile/DocTextIcon.js +0 -11
- package/internal/FileUploaderControl/FileUploaderFile/icons/tile/DocTextIcon.js.map +0 -1
- package/internal/FileUploaderControl/FileUploaderFile/icons/tile/FolderIcon.d.ts +0 -3
- package/internal/FileUploaderControl/FileUploaderFile/icons/tile/FolderIcon.js +0 -11
- package/internal/FileUploaderControl/FileUploaderFile/icons/tile/FolderIcon.js.map +0 -1
- package/internal/FileUploaderControl/FileUploaderFile/icons/tile/MarkupIcon.d.ts +0 -3
- package/internal/FileUploaderControl/FileUploaderFile/icons/tile/MarkupIcon.js +0 -11
- package/internal/FileUploaderControl/FileUploaderFile/icons/tile/MarkupIcon.js.map +0 -1
- package/internal/FileUploaderControl/FileUploaderFile/icons/tile/PdfIcon.d.ts +0 -3
- package/internal/FileUploaderControl/FileUploaderFile/icons/tile/PdfIcon.js +0 -11
- package/internal/FileUploaderControl/FileUploaderFile/icons/tile/PdfIcon.js.map +0 -1
- package/internal/FileUploaderControl/FileUploaderFile/icons/tile/PictureIcon.d.ts +0 -3
- package/internal/FileUploaderControl/FileUploaderFile/icons/tile/PictureIcon.js +0 -11
- package/internal/FileUploaderControl/FileUploaderFile/icons/tile/PictureIcon.js.map +0 -1
- package/internal/FileUploaderControl/FileUploaderFile/icons/tile/PresentationIcon.d.ts +0 -3
- package/internal/FileUploaderControl/FileUploaderFile/icons/tile/PresentationIcon.js +0 -11
- package/internal/FileUploaderControl/FileUploaderFile/icons/tile/PresentationIcon.js.map +0 -1
- package/internal/FileUploaderControl/FileUploaderFile/icons/tile/TableIcon.d.ts +0 -3
- package/internal/FileUploaderControl/FileUploaderFile/icons/tile/TableIcon.js +0 -11
- package/internal/FileUploaderControl/FileUploaderFile/icons/tile/TableIcon.js.map +0 -1
- package/internal/FileUploaderControl/FileUploaderFile/icons/tile/TextIcon.d.ts +0 -3
- package/internal/FileUploaderControl/FileUploaderFile/icons/tile/TextIcon.js +0 -11
- package/internal/FileUploaderControl/FileUploaderFile/icons/tile/TextIcon.js.map +0 -1
- package/internal/FileUploaderControl/FileUploaderFile/icons/tile/ValidationErrorIcon.d.ts +0 -3
- package/internal/FileUploaderControl/FileUploaderFile/icons/tile/ValidationErrorIcon.js +0 -11
- package/internal/FileUploaderControl/FileUploaderFile/icons/tile/ValidationErrorIcon.js.map +0 -1
- package/internal/FileUploaderControl/FileUploaderFile/icons/tile/ValidationWarningIcon.d.ts +0 -3
- package/internal/FileUploaderControl/FileUploaderFile/icons/tile/ValidationWarningIcon.js +0 -11
- package/internal/FileUploaderControl/FileUploaderFile/icons/tile/ValidationWarningIcon.js.map +0 -1
- package/internal/FileUploaderControl/FileUploaderFileList/FileUploaderFileList.js.map +0 -1
- package/internal/FileUploaderControl/FileUploaderFileList/FileUploaderFileList.styles.js.map +0 -1
- package/internal/FileUploaderControl/FileUploaderFileValidationResult.js.map +0 -1
- package/internal/FileUploaderControl/fileUtils.js.map +0 -1
- package/internal/FileUploaderControl/hooks/useControlLocale.d.ts +0 -1
- package/internal/FileUploaderControl/hooks/useControlLocale.js +0 -4
- package/internal/FileUploaderControl/hooks/useControlLocale.js.map +0 -1
- package/internal/FileUploaderControl/hooks/useFileUploaderSize.js.map +0 -1
- package/internal/FileUploaderControl/hooks/useUpload.js.map +0 -1
- package/internal/FileUploaderControl/withFileUploaderControlProvider.js.map +0 -1
- /package/{internal/FileUploaderControl → components/FileUploader}/FileUploaderControlContext.d.ts +0 -0
- /package/{internal/FileUploaderControl → components/FileUploader}/FileUploaderControlContext.js +0 -0
- /package/{internal/FileUploaderControl → components/FileUploader}/FileUploaderControlProvider.js +0 -0
- /package/{internal/FileUploaderControl → components/FileUploader}/FileUploaderFileList/FileUploaderFileList.styles.d.ts +0 -0
- /package/{internal/FileUploaderControl → components/FileUploader}/FileUploaderFileList/FileUploaderFileList.styles.js +0 -0
- /package/{internal/FileUploaderControl → components/FileUploader}/FileUploaderFileValidationResult.d.ts +0 -0
- /package/{internal/FileUploaderControl → components/FileUploader}/FileUploaderFileValidationResult.js +0 -0
- /package/{internal/FileUploaderControl → components/FileUploader}/fileUtils.d.ts +0 -0
- /package/{internal/FileUploaderControl → components/FileUploader}/fileUtils.js +0 -0
- /package/{internal/FileUploaderControl → components/FileUploader}/hooks/useFileUploaderSize.d.ts +0 -0
- /package/{internal/FileUploaderControl → components/FileUploader}/hooks/useFileUploaderSize.js +0 -0
- /package/{internal/FileUploaderControl → components/FileUploader}/hooks/useUpload.js +0 -0
- /package/{internal/FileUploaderControl → components/FileUploader}/withFileUploaderControlProvider.d.ts +0 -0
- /package/{internal/FileUploaderControl → components/FileUploader}/withFileUploaderControlProvider.js +0 -0
|
@@ -1,25 +1,25 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import type { TGetRootNode } from '../../lib/rootNode//rootNodeDecorator.js';
|
|
3
3
|
export interface GlobalLoaderProps {
|
|
4
|
-
/**
|
|
4
|
+
/** Задержка до появления лоадера в миллисекундах. */
|
|
5
5
|
delayBeforeShow?: number;
|
|
6
|
-
/**
|
|
6
|
+
/** Задержка до исчезновения лоадера в миллисекундах. */
|
|
7
7
|
delayBeforeHide?: number;
|
|
8
|
-
/**
|
|
8
|
+
/** Ожидаемое время(ms) ответа сервера. */
|
|
9
9
|
expectedResponseTime?: number;
|
|
10
|
-
/**
|
|
10
|
+
/** Показывать лоадер в виде бегающей полоски. */
|
|
11
11
|
rejected?: boolean;
|
|
12
|
-
/**
|
|
12
|
+
/** Показывать лоадер. */
|
|
13
13
|
active?: boolean;
|
|
14
|
-
/**
|
|
14
|
+
/** Отключить анимацию. */
|
|
15
15
|
disableAnimations?: boolean;
|
|
16
|
-
/**
|
|
16
|
+
/** Событие после появления лоадера. */
|
|
17
17
|
onStart?(): void;
|
|
18
|
-
/**
|
|
18
|
+
/** Событие после исчезновения лоадера. */
|
|
19
19
|
onDone?(): void;
|
|
20
|
-
/**
|
|
20
|
+
/** Событие после вызова reject. */
|
|
21
21
|
onReject?(): void;
|
|
22
|
-
/**
|
|
22
|
+
/** Событие после вызова accept. */
|
|
23
23
|
onAccept?(): void;
|
|
24
24
|
}
|
|
25
25
|
export interface GlobalLoaderState {
|
|
@@ -37,16 +37,13 @@ export declare const GlobalLoaderDataTids: {
|
|
|
37
37
|
};
|
|
38
38
|
type DefaultProps = Required<Pick<GlobalLoaderProps, 'expectedResponseTime' | 'delayBeforeShow' | 'delayBeforeHide' | 'rejected' | 'active' | 'disableAnimations'>>;
|
|
39
39
|
/**
|
|
40
|
-
*
|
|
40
|
+
* Универсальный индикатор обмена данными с сервером.
|
|
41
41
|
* Он появляется у верхней границы экрана и выглядит как тоненькая полоска, окрашенная в фирменный цвет продукта.
|
|
42
42
|
*
|
|
43
|
-
*
|
|
43
|
+
* Глобальный лоадер может быть только один в приложении. Поэтому каждый новый экземпляр компонента заменяет предыдущий экземпляр и начинает перехватывать статические методы.
|
|
44
44
|
*
|
|
45
45
|
* Предполагается монтирование компонента в единственном месте. И управление им через статические методы, либо через пропсы.
|
|
46
46
|
*
|
|
47
|
-
* `GlobalLoader` работает в двух режимах:
|
|
48
|
-
* * как прогресс-бар, примерно показывает ход получения данных от сервера.
|
|
49
|
-
* * как спиннер, когда есть проблемы с соединением.
|
|
50
47
|
*/
|
|
51
48
|
export declare class GlobalLoader extends React.Component<GlobalLoaderProps, GlobalLoaderState> {
|
|
52
49
|
static __KONTUR_REACT_UI__: string;
|
|
@@ -64,29 +61,29 @@ export declare class GlobalLoader extends React.Component<GlobalLoaderProps, Glo
|
|
|
64
61
|
componentDidUpdate(prevProps: Readonly<GlobalLoaderProps>): void;
|
|
65
62
|
render(): React.JSX.Element | false;
|
|
66
63
|
/**
|
|
67
|
-
* Запускает анимацию
|
|
68
|
-
* Равносильно установке пропа `active = true
|
|
64
|
+
* Запускает анимацию лоадера. <br />
|
|
65
|
+
* Равносильно установке пропа `active = true`.
|
|
69
66
|
*
|
|
70
67
|
* @public
|
|
71
68
|
*/
|
|
72
69
|
static start: (expectedResponseTime?: number) => void;
|
|
73
70
|
/**
|
|
74
|
-
* Показывает анимацию успешного завершения
|
|
75
|
-
* Равносильно установке пропа `active = false
|
|
71
|
+
* Показывает анимацию успешного завершения загрузки. <br />
|
|
72
|
+
* Равносильно установке пропа `active = false`.
|
|
76
73
|
*
|
|
77
74
|
* @public
|
|
78
75
|
*/
|
|
79
76
|
static done: () => void;
|
|
80
77
|
/**
|
|
81
|
-
* Переключает анимацию лоадера в состояние
|
|
82
|
-
* Равносильно установке пропа `rejected = true
|
|
78
|
+
* Переключает анимацию лоадера в состояние бегающей полоски. <br />
|
|
79
|
+
* Равносильно установке пропа `rejected = true`.
|
|
83
80
|
*
|
|
84
81
|
* @public
|
|
85
82
|
*/
|
|
86
83
|
static reject: () => void;
|
|
87
84
|
/**
|
|
88
|
-
* Возвращает лоадер из состояния
|
|
89
|
-
* Равносильно установке пропа `rejected = false
|
|
85
|
+
* Возвращает лоадер из состояния бегающей полоски в обычное и продолжает анимацию с того места, на котором она была прервана. <br />
|
|
86
|
+
* Равносильно установке пропа `rejected = false`.
|
|
90
87
|
*
|
|
91
88
|
* @public
|
|
92
89
|
*/
|
|
@@ -42,16 +42,13 @@ export var GlobalLoaderDataTids = {
|
|
|
42
42
|
};
|
|
43
43
|
var currentGlobalLoader;
|
|
44
44
|
/**
|
|
45
|
-
*
|
|
45
|
+
* Универсальный индикатор обмена данными с сервером.
|
|
46
46
|
* Он появляется у верхней границы экрана и выглядит как тоненькая полоска, окрашенная в фирменный цвет продукта.
|
|
47
47
|
*
|
|
48
|
-
*
|
|
48
|
+
* Глобальный лоадер может быть только один в приложении. Поэтому каждый новый экземпляр компонента заменяет предыдущий экземпляр и начинает перехватывать статические методы.
|
|
49
49
|
*
|
|
50
50
|
* Предполагается монтирование компонента в единственном месте. И управление им через статические методы, либо через пропсы.
|
|
51
51
|
*
|
|
52
|
-
* `GlobalLoader` работает в двух режимах:
|
|
53
|
-
* * как прогресс-бар, примерно показывает ход получения данных от сервера.
|
|
54
|
-
* * как спиннер, когда есть проблемы с соединением.
|
|
55
52
|
*/
|
|
56
53
|
var GlobalLoader = /** @class */ (function (_super) {
|
|
57
54
|
__extends(GlobalLoader, _super);
|
|
@@ -196,8 +193,8 @@ var GlobalLoader = /** @class */ (function (_super) {
|
|
|
196
193
|
disableAnimations: isTestEnv,
|
|
197
194
|
};
|
|
198
195
|
/**
|
|
199
|
-
* Запускает анимацию
|
|
200
|
-
* Равносильно установке пропа `active = true
|
|
196
|
+
* Запускает анимацию лоадера. <br />
|
|
197
|
+
* Равносильно установке пропа `active = true`.
|
|
201
198
|
*
|
|
202
199
|
* @public
|
|
203
200
|
*/
|
|
@@ -208,8 +205,8 @@ var GlobalLoader = /** @class */ (function (_super) {
|
|
|
208
205
|
}
|
|
209
206
|
};
|
|
210
207
|
/**
|
|
211
|
-
* Показывает анимацию успешного завершения
|
|
212
|
-
* Равносильно установке пропа `active = false
|
|
208
|
+
* Показывает анимацию успешного завершения загрузки. <br />
|
|
209
|
+
* Равносильно установке пропа `active = false`.
|
|
213
210
|
*
|
|
214
211
|
* @public
|
|
215
212
|
*/
|
|
@@ -217,8 +214,8 @@ var GlobalLoader = /** @class */ (function (_super) {
|
|
|
217
214
|
currentGlobalLoader === null || currentGlobalLoader === void 0 ? void 0 : currentGlobalLoader.setDone();
|
|
218
215
|
};
|
|
219
216
|
/**
|
|
220
|
-
* Переключает анимацию лоадера в состояние
|
|
221
|
-
* Равносильно установке пропа `rejected = true
|
|
217
|
+
* Переключает анимацию лоадера в состояние бегающей полоски. <br />
|
|
218
|
+
* Равносильно установке пропа `rejected = true`.
|
|
222
219
|
*
|
|
223
220
|
* @public
|
|
224
221
|
*/
|
|
@@ -226,8 +223,8 @@ var GlobalLoader = /** @class */ (function (_super) {
|
|
|
226
223
|
currentGlobalLoader === null || currentGlobalLoader === void 0 ? void 0 : currentGlobalLoader.setReject(true);
|
|
227
224
|
};
|
|
228
225
|
/**
|
|
229
|
-
* Возвращает лоадер из состояния
|
|
230
|
-
* Равносильно установке пропа `rejected = false
|
|
226
|
+
* Возвращает лоадер из состояния бегающей полоски в обычное и продолжает анимацию с того места, на котором она была прервана. <br />
|
|
227
|
+
* Равносильно установке пропа `rejected = false`.
|
|
231
228
|
*
|
|
232
229
|
* @public
|
|
233
230
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GlobalLoader.js","sourceRoot":"","sources":["../../../components/GlobalLoader/GlobalLoader.tsx"],"names":[],"mappings":"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","sourcesContent":["import React from 'react';\nimport debounce from 'lodash.debounce';\n\nimport { isTestEnv } from '../../lib/currentEnvironment.js';\nimport { CommonWrapper } from '../../internal/CommonWrapper/index.js';\nimport type { TGetRootNode, TSetRootNode } from '../../lib/rootNode//rootNodeDecorator.js';\nimport { rootNode } from '../../lib/rootNode/index.js';\nimport { createPropsGetter } from '../../lib/createPropsGetter.js';\n\nimport type { GlobalLoaderViewProps } from './GlobalLoaderView.js';\nimport { GlobalLoaderView } from './GlobalLoaderView.js';\n\nexport interface GlobalLoaderProps {\n /** Устанавливает задержку в миллисекундах до появления лоадера. */\n delayBeforeShow?: number;\n\n /** Устанавливает задержку в миллисекундах до исчезновения лоадера. */\n delayBeforeHide?: number;\n\n /** Устанавливает ожидаемое время(ms) ответа сервера. */\n expectedResponseTime?: number;\n\n /** Определяет, нужно ли показывать анимацию лоадера в виде спиннера. */\n rejected?: boolean;\n\n /** Определяет, показывать ли лоадер. */\n active?: boolean;\n\n /** Отключает анимацию. */\n disableAnimations?: boolean;\n\n /** Задает коллбек, вызывающийся после появления лоадера. */\n onStart?(): void;\n\n /** Задает коллбек, вызывающийся после исчезновения лоадера. */\n onDone?(): void;\n\n /** Задает коллбек, вызывающийся после вызова GlobalLoader.reject(). Или после установки пропа rejected = true. */\n onReject?(): void;\n\n /** Задает коллбек, вызывающийся после вызова GlobalLoader.accept() или установки пропа rejected = false. */\n onAccept?(): void;\n}\nexport interface GlobalLoaderState {\n visible: boolean;\n done: boolean;\n rejected: boolean;\n accept: boolean;\n dead: boolean;\n successAnimationInProgress: boolean;\n expectedResponseTime: number;\n started: boolean;\n}\n\nexport const GlobalLoaderDataTids = {\n root: 'GlobalLoader',\n} as const;\n\ntype DefaultProps = Required<\n Pick<\n GlobalLoaderProps,\n 'expectedResponseTime' | 'delayBeforeShow' | 'delayBeforeHide' | 'rejected' | 'active' | 'disableAnimations'\n >\n>;\n\nlet currentGlobalLoader: GlobalLoader | null;\n\n/**\n * Глобальный лоадер `GlobalLoader` — это универсальный индикатор обмена данными с сервером.\n * Он появляется у верхней границы экрана и выглядит как тоненькая полоска, окрашенная в фирменный цвет продукта.\n *\n * `GlobalLoader` может быть только один в приложении. Поэтому, каждый новый экземпляр компонента \"убивает\" предыдущий экземпляр, и начинает перехватывать статические методы.\n *\n * Предполагается монтирование компонента в единственном месте. И управление им через статические методы, либо через пропсы.\n *\n * `GlobalLoader` работает в двух режимах:\n * * как прогресс-бар, примерно показывает ход получения данных от сервера.\n * * как спиннер, когда есть проблемы с соединением.\n */\n@rootNode\nexport class GlobalLoader extends React.Component<GlobalLoaderProps, GlobalLoaderState> {\n public static __KONTUR_REACT_UI__ = 'GlobalLoader';\n public static displayName = 'GlobalLoader';\n\n public getRootNode!: TGetRootNode;\n private setRootNode!: TSetRootNode;\n private getProps = createPropsGetter(GlobalLoader.defaultProps);\n\n private readonly startTask = debounce(() => {\n this.setState({ visible: true });\n this.props.onStart?.();\n }, this.getProps().delayBeforeShow);\n\n private readonly stopTask = debounce(() => {\n this.setState({ visible: false, successAnimationInProgress: false, started: false });\n this.props.onDone?.();\n }, this.getProps().delayBeforeHide);\n\n private readonly resumeTaskAfterSuccessAnimation = debounce(() => {\n this.setActive();\n }, this.getProps().delayBeforeHide);\n\n public static defaultProps: DefaultProps = {\n expectedResponseTime: 1000,\n delayBeforeShow: 1000,\n delayBeforeHide: 1000,\n rejected: false,\n active: false,\n disableAnimations: isTestEnv,\n };\n\n constructor(props: GlobalLoaderProps) {\n super(props);\n this.state = {\n started: false,\n visible: false,\n done: false,\n rejected: false,\n accept: false,\n dead: false,\n successAnimationInProgress: false,\n expectedResponseTime: this.getProps().expectedResponseTime,\n };\n }\n componentDidMount() {\n currentGlobalLoader?.kill();\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n currentGlobalLoader = this;\n const { active, rejected } = this.getProps();\n if (active) {\n this.setActive();\n }\n if (rejected) {\n this.setReject(true);\n }\n }\n\n componentWillUnmount(): void {\n currentGlobalLoader = null;\n }\n\n componentDidUpdate(prevProps: Readonly<GlobalLoaderProps>) {\n const { expectedResponseTime, rejected, active } = this.getProps();\n if (expectedResponseTime !== prevProps.expectedResponseTime) {\n this.setState({ expectedResponseTime });\n }\n if (rejected !== prevProps.rejected) {\n this.setReject(rejected);\n }\n if (active !== prevProps.active) {\n if (active) {\n this.setActive();\n } else {\n this.setDone();\n }\n }\n }\n\n public render(): React.JSX.Element | false {\n let status: GlobalLoaderViewProps['status'] = 'standard';\n\n if (this.state.done) {\n status = 'success';\n } else if (this.state.rejected) {\n status = 'error';\n } else if (this.state.accept) {\n status = 'accept';\n }\n const { delayBeforeHide, disableAnimations } = this.getProps();\n return (\n !this.state.dead &&\n this.state.visible && (\n <CommonWrapper rootNodeRef={this.setRootNode} {...this.props}>\n <GlobalLoaderView\n expectedResponseTime={this.state.expectedResponseTime}\n delayBeforeHide={delayBeforeHide}\n status={status}\n data-tid={GlobalLoaderDataTids.root}\n disableAnimations={disableAnimations}\n />\n </CommonWrapper>\n )\n );\n }\n\n /**\n * Запускает анимацию лоадера <br />\n * Равносильно установке пропа `active = true`\n *\n * @public\n */\n public static start = (expectedResponseTime?: number): void => {\n currentGlobalLoader?.setActive();\n if (typeof expectedResponseTime === 'number') {\n currentGlobalLoader?.updateExpectedResponseTime(expectedResponseTime);\n }\n };\n\n /**\n * Показывает анимацию успешного завершения загрузки <br />\n * Равносильно установке пропа `active = false`\n *\n * @public\n */\n public static done = (): void => {\n currentGlobalLoader?.setDone();\n };\n\n /**\n * Переключает анимацию лоадера в состояние спиннера <br />\n * Равносильно установке пропа `rejected = true`\n *\n * @public\n */\n public static reject = (): void => {\n currentGlobalLoader?.setReject(true);\n };\n\n /**\n * Возвращает лоадер из состояния спиннера в обычное и продолжает анимацию с того места, на котором она была прерван <br />\n * Равносильно установке пропа `rejected = false`\n *\n * @public\n */\n public static accept = (): void => {\n currentGlobalLoader?.setReject(false);\n };\n\n public setActive = (): void => {\n this.startTask.cancel();\n if (this.state.successAnimationInProgress) {\n this.resumeTaskAfterSuccessAnimation();\n } else {\n this.setState({ visible: false, done: false, rejected: false, accept: false, started: true });\n if (this.getProps().rejected) {\n this.setReject(true);\n } else {\n this.stopTask.cancel();\n this.startTask();\n }\n }\n };\n\n public setDone = (): void => {\n if (!this.state.started) {\n return;\n }\n this.setState({ done: true, successAnimationInProgress: true });\n this.startTask.cancel();\n this.resumeTaskAfterSuccessAnimation.cancel();\n this.stopTask();\n };\n\n public setReject = (reject: boolean): void => {\n if (!this.state.visible && (this.state.started || this.getProps().active)) {\n this.setState({ visible: true });\n }\n this.startTask.cancel();\n this.stopTask.cancel();\n if (reject) {\n this.props.onReject?.();\n } else if (this.state.rejected) {\n this.setState({ accept: true });\n this.props.onAccept?.();\n }\n this.setState({ rejected: reject });\n };\n\n public updateExpectedResponseTime(expectedResponseTime: number): void {\n this.setState({ expectedResponseTime });\n }\n\n public kill = (): void => {\n this.stopTask.cancel();\n this.startTask.cancel();\n this.resumeTaskAfterSuccessAnimation.cancel();\n this.setState({\n dead: true,\n });\n };\n}\n"]}
|
|
1
|
+
{"version":3,"file":"GlobalLoader.js","sourceRoot":"","sources":["../../../components/GlobalLoader/GlobalLoader.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,QAAQ,MAAM,iBAAiB,CAAC;AAEvC,OAAO,EAAE,SAAS,EAAE,MAAM,iCAAiC,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,MAAM,uCAAuC,CAAC;AAEtE,OAAO,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AACvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AAGnE,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AA4CzD,MAAM,CAAC,IAAM,oBAAoB,GAAG;IAClC,IAAI,EAAE,cAAc;CACZ,CAAC;AASX,IAAI,mBAAwC,CAAC;AAE7C;;;;;;;;GAQG;AAEH;IAAkC,gCAAqD;IA+BrF,sBAAY,KAAwB;QAClC,YAAA,MAAK,YAAC,KAAK,CAAC,SAAC;QA1BP,cAAQ,GAAG,iBAAiB,CAAC,cAAY,CAAC,YAAY,CAAC,CAAC;QAE/C,eAAS,GAAG,QAAQ,CAAC;;YACpC,KAAI,CAAC,QAAQ,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;YACjC,MAAA,MAAA,KAAI,CAAC,KAAK,EAAC,OAAO,kDAAI,CAAC;QACzB,CAAC,EAAE,KAAI,CAAC,QAAQ,EAAE,CAAC,eAAe,CAAC,CAAC;QAEnB,cAAQ,GAAG,QAAQ,CAAC;;YACnC,KAAI,CAAC,QAAQ,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,0BAA0B,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;YACrF,MAAA,MAAA,KAAI,CAAC,KAAK,EAAC,MAAM,kDAAI,CAAC;QACxB,CAAC,EAAE,KAAI,CAAC,QAAQ,EAAE,CAAC,eAAe,CAAC,CAAC;QAEnB,qCAA+B,GAAG,QAAQ,CAAC;YAC1D,KAAI,CAAC,SAAS,EAAE,CAAC;QACnB,CAAC,EAAE,KAAI,CAAC,QAAQ,EAAE,CAAC,eAAe,CAAC,CAAC;QAgI7B,eAAS,GAAG;YACjB,KAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC;YACxB,IAAI,KAAI,CAAC,KAAK,CAAC,0BAA0B,EAAE,CAAC;gBAC1C,KAAI,CAAC,+BAA+B,EAAE,CAAC;YACzC,CAAC;iBAAM,CAAC;gBACN,KAAI,CAAC,QAAQ,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;gBAC9F,IAAI,KAAI,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAC;oBAC7B,KAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;gBACvB,CAAC;qBAAM,CAAC;oBACN,KAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;oBACvB,KAAI,CAAC,SAAS,EAAE,CAAC;gBACnB,CAAC;YACH,CAAC;QACH,CAAC,CAAC;QAEK,aAAO,GAAG;YACf,IAAI,CAAC,KAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;gBACxB,OAAO;YACT,CAAC;YACD,KAAI,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,0BAA0B,EAAE,IAAI,EAAE,CAAC,CAAC;YAChE,KAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC;YACxB,KAAI,CAAC,+BAA+B,CAAC,MAAM,EAAE,CAAC;YAC9C,KAAI,CAAC,QAAQ,EAAE,CAAC;QAClB,CAAC,CAAC;QAEK,eAAS,GAAG,UAAC,MAAe;;YACjC,IAAI,CAAC,KAAI,CAAC,KAAK,CAAC,OAAO,IAAI,CAAC,KAAI,CAAC,KAAK,CAAC,OAAO,IAAI,KAAI,CAAC,QAAQ,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC1E,KAAI,CAAC,QAAQ,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;YACnC,CAAC;YACD,KAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC;YACxB,KAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;YACvB,IAAI,MAAM,EAAE,CAAC;gBACX,MAAA,MAAA,KAAI,CAAC,KAAK,EAAC,QAAQ,kDAAI,CAAC;YAC1B,CAAC;iBAAM,IAAI,KAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;gBAC/B,KAAI,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;gBAChC,MAAA,MAAA,KAAI,CAAC,KAAK,EAAC,QAAQ,kDAAI,CAAC;YAC1B,CAAC;YACD,KAAI,CAAC,QAAQ,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;QACtC,CAAC,CAAC;QAMK,UAAI,GAAG;YACZ,KAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;YACvB,KAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC;YACxB,KAAI,CAAC,+BAA+B,CAAC,MAAM,EAAE,CAAC;YAC9C,KAAI,CAAC,QAAQ,CAAC;gBACZ,IAAI,EAAE,IAAI;aACX,CAAC,CAAC;QACL,CAAC,CAAC;QAtKA,KAAI,CAAC,KAAK,GAAG;YACX,OAAO,EAAE,KAAK;YACd,OAAO,EAAE,KAAK;YACd,IAAI,EAAE,KAAK;YACX,QAAQ,EAAE,KAAK;YACf,MAAM,EAAE,KAAK;YACb,IAAI,EAAE,KAAK;YACX,0BAA0B,EAAE,KAAK;YACjC,oBAAoB,EAAE,KAAI,CAAC,QAAQ,EAAE,CAAC,oBAAoB;SAC3D,CAAC;;IACJ,CAAC;qBA3CU,YAAY;IA4CvB,wCAAiB,GAAjB;QACE,mBAAmB,aAAnB,mBAAmB,uBAAnB,mBAAmB,CAAE,IAAI,EAAE,CAAC;QAC5B,4DAA4D;QAC5D,mBAAmB,GAAG,IAAI,CAAC;QACrB,IAAA,KAAuB,IAAI,CAAC,QAAQ,EAAE,EAApC,MAAM,YAAA,EAAE,QAAQ,cAAoB,CAAC;QAC7C,IAAI,MAAM,EAAE,CAAC;YACX,IAAI,CAAC,SAAS,EAAE,CAAC;QACnB,CAAC;QACD,IAAI,QAAQ,EAAE,CAAC;YACb,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QACvB,CAAC;IACH,CAAC;IAED,2CAAoB,GAApB;QACE,mBAAmB,GAAG,IAAI,CAAC;IAC7B,CAAC;IAED,yCAAkB,GAAlB,UAAmB,SAAsC;QACjD,IAAA,KAA6C,IAAI,CAAC,QAAQ,EAAE,EAA1D,oBAAoB,0BAAA,EAAE,QAAQ,cAAA,EAAE,MAAM,YAAoB,CAAC;QACnE,IAAI,oBAAoB,KAAK,SAAS,CAAC,oBAAoB,EAAE,CAAC;YAC5D,IAAI,CAAC,QAAQ,CAAC,EAAE,oBAAoB,sBAAA,EAAE,CAAC,CAAC;QAC1C,CAAC;QACD,IAAI,QAAQ,KAAK,SAAS,CAAC,QAAQ,EAAE,CAAC;YACpC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QAC3B,CAAC;QACD,IAAI,MAAM,KAAK,SAAS,CAAC,MAAM,EAAE,CAAC;YAChC,IAAI,MAAM,EAAE,CAAC;gBACX,IAAI,CAAC,SAAS,EAAE,CAAC;YACnB,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,CAAC;QACH,CAAC;IACH,CAAC;IAEM,6BAAM,GAAb;QACE,IAAI,MAAM,GAAoC,UAAU,CAAC;QAEzD,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;YACpB,MAAM,GAAG,SAAS,CAAC;QACrB,CAAC;aAAM,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;YAC/B,MAAM,GAAG,OAAO,CAAC;QACnB,CAAC;aAAM,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;YAC7B,MAAM,GAAG,QAAQ,CAAC;QACpB,CAAC;QACK,IAAA,KAAyC,IAAI,CAAC,QAAQ,EAAE,EAAtD,eAAe,qBAAA,EAAE,iBAAiB,uBAAoB,CAAC;QAC/D,OAAO,CACL,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI;YAChB,IAAI,CAAC,KAAK,CAAC,OAAO,IAAI,CACpB,oBAAC,aAAa,aAAC,WAAW,EAAE,IAAI,CAAC,WAAW,IAAM,IAAI,CAAC,KAAK;YAC1D,oBAAC,gBAAgB,IACf,oBAAoB,EAAE,IAAI,CAAC,KAAK,CAAC,oBAAoB,EACrD,eAAe,EAAE,eAAe,EAChC,MAAM,EAAE,MAAM,cACJ,oBAAoB,CAAC,IAAI,EACnC,iBAAiB,EAAE,iBAAiB,GACpC,CACY,CACjB,CACF,CAAC;IACJ,CAAC;IAqFM,iDAA0B,GAAjC,UAAkC,oBAA4B;QAC5D,IAAI,CAAC,QAAQ,CAAC,EAAE,oBAAoB,sBAAA,EAAE,CAAC,CAAC;IAC1C,CAAC;;IA7La,gCAAmB,GAAG,cAAc,AAAjB,CAAkB;IACrC,wBAAW,GAAG,cAAc,AAAjB,CAAkB;IAoB7B,yBAAY,GAAiB;QACzC,oBAAoB,EAAE,IAAI;QAC1B,eAAe,EAAE,IAAI;QACrB,eAAe,EAAE,IAAI;QACrB,QAAQ,EAAE,KAAK;QACf,MAAM,EAAE,KAAK;QACb,iBAAiB,EAAE,SAAS;KAC7B,AAPyB,CAOxB;IA4EF;;;;;OAKG;IACW,kBAAK,GAAG,UAAC,oBAA6B;QAClD,mBAAmB,aAAnB,mBAAmB,uBAAnB,mBAAmB,CAAE,SAAS,EAAE,CAAC;QACjC,IAAI,OAAO,oBAAoB,KAAK,QAAQ,EAAE,CAAC;YAC7C,mBAAmB,aAAnB,mBAAmB,uBAAnB,mBAAmB,CAAE,0BAA0B,CAAC,oBAAoB,CAAC,CAAC;QACxE,CAAC;IACH,CAAC,AALkB,CAKjB;IAEF;;;;;OAKG;IACW,iBAAI,GAAG;QACnB,mBAAmB,aAAnB,mBAAmB,uBAAnB,mBAAmB,CAAE,OAAO,EAAE,CAAC;IACjC,CAAC,AAFiB,CAEhB;IAEF;;;;;OAKG;IACW,mBAAM,GAAG;QACrB,mBAAmB,aAAnB,mBAAmB,uBAAnB,mBAAmB,CAAE,SAAS,CAAC,IAAI,CAAC,CAAC;IACvC,CAAC,AAFmB,CAElB;IAEF;;;;;OAKG;IACW,mBAAM,GAAG;QACrB,mBAAmB,aAAnB,mBAAmB,uBAAnB,mBAAmB,CAAE,SAAS,CAAC,KAAK,CAAC,CAAC;IACxC,CAAC,AAFmB,CAElB;IAlJS,YAAY;QADxB,QAAQ;OACI,YAAY,CAwMxB;IAAD,mBAAC;CAAA,AAxMD,CAAkC,KAAK,CAAC,SAAS,GAwMhD;SAxMY,YAAY","sourcesContent":["import React from 'react';\nimport debounce from 'lodash.debounce';\n\nimport { isTestEnv } from '../../lib/currentEnvironment.js';\nimport { CommonWrapper } from '../../internal/CommonWrapper/index.js';\nimport type { TGetRootNode, TSetRootNode } from '../../lib/rootNode//rootNodeDecorator.js';\nimport { rootNode } from '../../lib/rootNode/index.js';\nimport { createPropsGetter } from '../../lib/createPropsGetter.js';\n\nimport type { GlobalLoaderViewProps } from './GlobalLoaderView.js';\nimport { GlobalLoaderView } from './GlobalLoaderView.js';\n\nexport interface GlobalLoaderProps {\n /** Задержка до появления лоадера в миллисекундах. */\n delayBeforeShow?: number;\n\n /** Задержка до исчезновения лоадера в миллисекундах. */\n delayBeforeHide?: number;\n\n /** Ожидаемое время(ms) ответа сервера. */\n expectedResponseTime?: number;\n\n /** Показывать лоадер в виде бегающей полоски. */\n rejected?: boolean;\n\n /** Показывать лоадер. */\n active?: boolean;\n\n /** Отключить анимацию. */\n disableAnimations?: boolean;\n\n /** Событие после появления лоадера. */\n onStart?(): void;\n\n /** Событие после исчезновения лоадера. */\n onDone?(): void;\n\n /** Событие после вызова reject. */\n onReject?(): void;\n\n /** Событие после вызова accept. */\n onAccept?(): void;\n}\nexport interface GlobalLoaderState {\n visible: boolean;\n done: boolean;\n rejected: boolean;\n accept: boolean;\n dead: boolean;\n successAnimationInProgress: boolean;\n expectedResponseTime: number;\n started: boolean;\n}\n\nexport const GlobalLoaderDataTids = {\n root: 'GlobalLoader',\n} as const;\n\ntype DefaultProps = Required<\n Pick<\n GlobalLoaderProps,\n 'expectedResponseTime' | 'delayBeforeShow' | 'delayBeforeHide' | 'rejected' | 'active' | 'disableAnimations'\n >\n>;\n\nlet currentGlobalLoader: GlobalLoader | null;\n\n/**\n * Универсальный индикатор обмена данными с сервером.\n * Он появляется у верхней границы экрана и выглядит как тоненькая полоска, окрашенная в фирменный цвет продукта.\n *\n * Глобальный лоадер может быть только один в приложении. Поэтому каждый новый экземпляр компонента заменяет предыдущий экземпляр и начинает перехватывать статические методы.\n *\n * Предполагается монтирование компонента в единственном месте. И управление им через статические методы, либо через пропсы.\n *\n */\n@rootNode\nexport class GlobalLoader extends React.Component<GlobalLoaderProps, GlobalLoaderState> {\n public static __KONTUR_REACT_UI__ = 'GlobalLoader';\n public static displayName = 'GlobalLoader';\n\n public getRootNode!: TGetRootNode;\n private setRootNode!: TSetRootNode;\n private getProps = createPropsGetter(GlobalLoader.defaultProps);\n\n private readonly startTask = debounce(() => {\n this.setState({ visible: true });\n this.props.onStart?.();\n }, this.getProps().delayBeforeShow);\n\n private readonly stopTask = debounce(() => {\n this.setState({ visible: false, successAnimationInProgress: false, started: false });\n this.props.onDone?.();\n }, this.getProps().delayBeforeHide);\n\n private readonly resumeTaskAfterSuccessAnimation = debounce(() => {\n this.setActive();\n }, this.getProps().delayBeforeHide);\n\n public static defaultProps: DefaultProps = {\n expectedResponseTime: 1000,\n delayBeforeShow: 1000,\n delayBeforeHide: 1000,\n rejected: false,\n active: false,\n disableAnimations: isTestEnv,\n };\n\n constructor(props: GlobalLoaderProps) {\n super(props);\n this.state = {\n started: false,\n visible: false,\n done: false,\n rejected: false,\n accept: false,\n dead: false,\n successAnimationInProgress: false,\n expectedResponseTime: this.getProps().expectedResponseTime,\n };\n }\n componentDidMount() {\n currentGlobalLoader?.kill();\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n currentGlobalLoader = this;\n const { active, rejected } = this.getProps();\n if (active) {\n this.setActive();\n }\n if (rejected) {\n this.setReject(true);\n }\n }\n\n componentWillUnmount(): void {\n currentGlobalLoader = null;\n }\n\n componentDidUpdate(prevProps: Readonly<GlobalLoaderProps>) {\n const { expectedResponseTime, rejected, active } = this.getProps();\n if (expectedResponseTime !== prevProps.expectedResponseTime) {\n this.setState({ expectedResponseTime });\n }\n if (rejected !== prevProps.rejected) {\n this.setReject(rejected);\n }\n if (active !== prevProps.active) {\n if (active) {\n this.setActive();\n } else {\n this.setDone();\n }\n }\n }\n\n public render(): React.JSX.Element | false {\n let status: GlobalLoaderViewProps['status'] = 'standard';\n\n if (this.state.done) {\n status = 'success';\n } else if (this.state.rejected) {\n status = 'error';\n } else if (this.state.accept) {\n status = 'accept';\n }\n const { delayBeforeHide, disableAnimations } = this.getProps();\n return (\n !this.state.dead &&\n this.state.visible && (\n <CommonWrapper rootNodeRef={this.setRootNode} {...this.props}>\n <GlobalLoaderView\n expectedResponseTime={this.state.expectedResponseTime}\n delayBeforeHide={delayBeforeHide}\n status={status}\n data-tid={GlobalLoaderDataTids.root}\n disableAnimations={disableAnimations}\n />\n </CommonWrapper>\n )\n );\n }\n\n /**\n * Запускает анимацию лоадера. <br />\n * Равносильно установке пропа `active = true`.\n *\n * @public\n */\n public static start = (expectedResponseTime?: number): void => {\n currentGlobalLoader?.setActive();\n if (typeof expectedResponseTime === 'number') {\n currentGlobalLoader?.updateExpectedResponseTime(expectedResponseTime);\n }\n };\n\n /**\n * Показывает анимацию успешного завершения загрузки. <br />\n * Равносильно установке пропа `active = false`.\n *\n * @public\n */\n public static done = (): void => {\n currentGlobalLoader?.setDone();\n };\n\n /**\n * Переключает анимацию лоадера в состояние бегающей полоски. <br />\n * Равносильно установке пропа `rejected = true`.\n *\n * @public\n */\n public static reject = (): void => {\n currentGlobalLoader?.setReject(true);\n };\n\n /**\n * Возвращает лоадер из состояния бегающей полоски в обычное и продолжает анимацию с того места, на котором она была прервана. <br />\n * Равносильно установке пропа `rejected = false`.\n *\n * @public\n */\n public static accept = (): void => {\n currentGlobalLoader?.setReject(false);\n };\n\n public setActive = (): void => {\n this.startTask.cancel();\n if (this.state.successAnimationInProgress) {\n this.resumeTaskAfterSuccessAnimation();\n } else {\n this.setState({ visible: false, done: false, rejected: false, accept: false, started: true });\n if (this.getProps().rejected) {\n this.setReject(true);\n } else {\n this.stopTask.cancel();\n this.startTask();\n }\n }\n };\n\n public setDone = (): void => {\n if (!this.state.started) {\n return;\n }\n this.setState({ done: true, successAnimationInProgress: true });\n this.startTask.cancel();\n this.resumeTaskAfterSuccessAnimation.cancel();\n this.stopTask();\n };\n\n public setReject = (reject: boolean): void => {\n if (!this.state.visible && (this.state.started || this.getProps().active)) {\n this.setState({ visible: true });\n }\n this.startTask.cancel();\n this.stopTask.cancel();\n if (reject) {\n this.props.onReject?.();\n } else if (this.state.rejected) {\n this.setState({ accept: true });\n this.props.onAccept?.();\n }\n this.setState({ rejected: reject });\n };\n\n public updateExpectedResponseTime(expectedResponseTime: number): void {\n this.setState({ expectedResponseTime });\n }\n\n public kill = (): void => {\n this.stopTask.cancel();\n this.startTask.cancel();\n this.resumeTaskAfterSuccessAnimation.cancel();\n this.setState({\n dead: true,\n });\n };\n}\n"]}
|
|
@@ -7,20 +7,19 @@ import type { CommonProps } from '../../internal/CommonWrapper/index.js';
|
|
|
7
7
|
import type { TGetRootNode } from '../../lib/rootNode/index.js';
|
|
8
8
|
import type { SizeProp } from '../../lib/types/props.js';
|
|
9
9
|
export interface KebabProps extends Pick<AriaAttributes, 'aria-label'>, Pick<HTMLAttributes<HTMLElement>, 'id'>, Pick<PopupMenuProps, 'onOpen' | 'onClose' | 'popupMenuId' | 'preventIconsOffset'>, CommonProps {
|
|
10
|
-
/**
|
|
11
|
-
disabled?: boolean;
|
|
12
|
-
/** Задает размер контрола. */
|
|
10
|
+
/** Размер кнопки. */
|
|
13
11
|
size?: SizeProp;
|
|
14
|
-
/**
|
|
15
|
-
*
|
|
16
|
-
|
|
12
|
+
/** Список доступных позиций выпадающего меню относительно кнопки.
|
|
13
|
+
* @default ['bottom left', 'bottom right', 'top left', 'top right'].
|
|
14
|
+
*/
|
|
17
15
|
positions?: PopupPositionsType[];
|
|
18
|
-
|
|
19
|
-
/** Задает максимальную высоту меню. */
|
|
16
|
+
/** Максимальная высота меню. */
|
|
20
17
|
menuMaxHeight?: number | string;
|
|
21
|
-
/**
|
|
18
|
+
/** Блокирует кнопку. */
|
|
19
|
+
disabled?: boolean;
|
|
20
|
+
/** Отключает анимацию выпадающего меню. */
|
|
22
21
|
disableAnimations?: boolean;
|
|
23
|
-
/**
|
|
22
|
+
/** Заменяет иконку кебаба у кнопки. */
|
|
24
23
|
icon?: React.ReactNode;
|
|
25
24
|
/** @ignore */
|
|
26
25
|
'aria-describedby'?: AriaAttributes['aria-describedby'];
|
|
@@ -34,7 +33,7 @@ export interface KebabState {
|
|
|
34
33
|
}
|
|
35
34
|
type DefaultProps = Required<Pick<KebabProps, 'onOpen' | 'onClose' | 'positions' | 'disableAnimations'>>;
|
|
36
35
|
/**
|
|
37
|
-
* Кебаб-меню
|
|
36
|
+
* Кебаб-меню содержит действия с объектом.
|
|
38
37
|
*/
|
|
39
38
|
export declare class Kebab extends React.Component<KebabProps, KebabState> {
|
|
40
39
|
static __KONTUR_REACT_UI__: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Kebab.js","sourceRoot":"","sources":["../../../components/Kebab/Kebab.tsx"],"names":[],"mappings":"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","sourcesContent":["import type { AriaAttributes, HTMLAttributes, JSX } from 'react';\nimport React from 'react';\nimport { isElement } from 'react-is';\nimport type { Emotion } from '@emotion/css/create-instance';\n\nimport type { GlobalObject } from '../../lib/globalObject.js';\nimport { isKonturIcon } from '../../lib/utils.js';\nimport { isKeyArrowVertical, isKeyEnter, isKeySpace, someKeys } from '../../lib/events/keyboard/identifiers.js';\nimport * as LayoutEvents from '../../lib/LayoutEvents.js';\nimport { KeyListener } from '../../lib/events/keyListener.js';\nimport type { PopupMenuCaptionProps, PopupMenuProps } from '../../internal/PopupMenu/index.js';\nimport { PopupMenu } from '../../internal/PopupMenu/index.js';\nimport type { Nullable } from '../../typings/utility-types.js';\nimport type { PopupPositionsType } from '../../internal/Popup/index.js';\nimport { ThemeContext } from '../../lib/theming/ThemeContext.js';\nimport type { Theme } from '../../lib/theming/Theme.js';\nimport { isTestEnv } from '../../lib/currentEnvironment.js';\nimport { ThemeFactory } from '../../lib/theming/ThemeFactory.js';\nimport type { CommonProps } from '../../internal/CommonWrapper/index.js';\nimport { CommonWrapper } from '../../internal/CommonWrapper/index.js';\nimport type { TGetRootNode, TSetRootNode } from '../../lib/rootNode/index.js';\nimport { rootNode } from '../../lib/rootNode/index.js';\nimport { createPropsGetter } from '../../lib/createPropsGetter.js';\nimport type { SizeProp } from '../../lib/types/props.js';\nimport { getVisualStateDataAttributes } from '../../internal/CommonWrapper/utils/getVisualStateDataAttributes.js';\nimport { withSize } from '../../lib/size/SizeDecorator.js';\nimport { withRenderEnvironment } from '../../lib/renderEnvironment/index.js';\nimport type { IconProps } from '../../internal/icons2022/BaseIcon.js';\n\nimport { getStyles } from './Kebab.styles.js';\nimport { KebabIcon } from './KebabIcon.js';\n\nexport interface KebabProps\n extends Pick<AriaAttributes, 'aria-label'>,\n Pick<HTMLAttributes<HTMLElement>, 'id'>,\n Pick<PopupMenuProps, 'onOpen' | 'onClose' | 'popupMenuId' | 'preventIconsOffset'>,\n CommonProps {\n /** Делает компонент недоступным. */\n disabled?: boolean;\n\n /** Задает размер контрола. */\n size?: SizeProp;\n\n /** Определяет список позиций, доступных для расположения выпадашки относительно `kebab`.\n * Если во всех позициях выпадашка вылезает за пределы `viewport`, будет использована первая из этого списка.\n * @default ['bottom left', 'bottom right', 'top left', 'top right']. */\n positions?: PopupPositionsType[];\n positions2?: string;\n\n /** Задает максимальную высоту меню. */\n menuMaxHeight?: number | string;\n\n /** Отключает анимацию. */\n disableAnimations?: boolean;\n\n /** Добавляет иконку слева. */\n icon?: React.ReactNode;\n\n /** @ignore */\n 'aria-describedby'?: AriaAttributes['aria-describedby'];\n}\n\nexport const KebabDataTids = {\n caption: 'Kebab__caption',\n} as const;\n\nexport interface KebabState {\n anchor: Nullable<HTMLElement>;\n focusedByTab: boolean;\n}\n\ntype DefaultProps = Required<Pick<KebabProps, 'onOpen' | 'onClose' | 'positions' | 'disableAnimations'>>;\n\n/**\n * Кебаб-меню `Kebab` содержит действия с объектом.\n */\n@withRenderEnvironment\n@rootNode\n@withSize\nexport class Kebab extends React.Component<KebabProps, KebabState> {\n public static __KONTUR_REACT_UI__ = 'Kebab';\n public static displayName = 'Kebab';\n\n public static defaultProps: DefaultProps = {\n onOpen: () => undefined,\n onClose: () => undefined,\n positions: ['bottom left', 'bottom right', 'top left', 'top right'],\n disableAnimations: isTestEnv,\n };\n\n private getProps = createPropsGetter(Kebab.defaultProps);\n\n public state: KebabState = {\n focusedByTab: false,\n anchor: null,\n };\n\n private globalObject!: GlobalObject;\n private emotion!: Emotion;\n private cx!: Emotion['cx'];\n private styles!: ReturnType<typeof getStyles>;\n private theme!: Theme;\n private size!: SizeProp;\n public getRootNode!: TGetRootNode;\n private setRootNode!: TSetRootNode;\n private keyListener!: KeyListener;\n\n private listener: {\n remove: () => void;\n } = {\n remove: () => undefined,\n };\n\n public componentDidMount() {\n this.keyListener = new KeyListener(this.globalObject);\n /** addListener'у нужен колбэк в аргумент */\n this.listener = LayoutEvents.addListener(() => undefined, this.globalObject);\n }\n\n public componentWillUnmount() {\n this.listener.remove();\n }\n\n public render(): JSX.Element {\n this.styles = getStyles(this.emotion);\n\n return (\n <ThemeContext.Consumer>\n {(theme) => {\n this.theme = theme;\n return (\n <ThemeContext.Provider\n value={ThemeFactory.create(\n {\n popupMargin: theme.kebabMargin,\n },\n theme,\n )}\n >\n {this.renderMain()}\n </ThemeContext.Provider>\n );\n }}\n </ThemeContext.Consumer>\n );\n }\n\n private renderMain() {\n const { disabled } = this.props;\n const { positions, disableAnimations, onOpen, onClose } = this.getProps();\n return (\n <CommonWrapper rootNodeRef={this.setRootNode} {...this.props} {...getVisualStateDataAttributes({ disabled })}>\n <PopupMenu\n id={this.props.id}\n popupHasPin={false}\n preventIconsOffset={this.props.preventIconsOffset}\n positions={positions}\n onChangeMenuState={this.handleChangeMenuState}\n caption={this.renderCaption}\n disableAnimations={disableAnimations}\n menuMaxHeight={this.props.menuMaxHeight}\n onOpen={onOpen}\n onClose={onClose}\n popupMenuId={this.props.popupMenuId}\n aria-label={this.props['aria-label']}\n >\n {!disabled && this.props.children}\n </PopupMenu>\n </CommonWrapper>\n );\n }\n\n private renderCaption = (captionProps: PopupMenuCaptionProps) => {\n const { disabled } = this.getProps();\n const size = this.size;\n const handleCaptionKeyDown = (event: React.KeyboardEvent<HTMLDivElement>) => {\n if (!disabled) {\n this.handleCaptionKeyDown(event, captionProps.openMenu);\n }\n };\n\n const handleCaptionClick = () => {\n if (!disabled) {\n captionProps.toggleMenu();\n }\n };\n\n return (\n <span\n role=\"button\"\n data-tid={KebabDataTids.caption}\n tabIndex={disabled ? -1 : 0}\n onClick={handleCaptionClick}\n onKeyDown={handleCaptionKeyDown}\n onFocus={this.handleFocus}\n onBlur={this.handleBlur}\n className={this.cx(\n this.styles.kebab(this.theme),\n size === 'small' && this.styles.kebabSmall(this.theme),\n size === 'medium' && this.styles.kebabMedium(this.theme),\n size === 'large' && this.styles.kebabLarge(this.theme),\n captionProps.opened && this.styles.opened(this.theme),\n disabled && this.styles.disabled(),\n this.state.focusedByTab && this.styles.focused(this.theme),\n )}\n aria-describedby={this.props['aria-describedby']}\n >\n {this.renderIcon()}\n </span>\n );\n };\n\n private handleCaptionKeyDown = (\n e: React.KeyboardEvent<HTMLDivElement>,\n openMenu: PopupMenuCaptionProps['openMenu'],\n ) => {\n if (someKeys(isKeyEnter, isKeySpace, isKeyArrowVertical)(e)) {\n e.preventDefault();\n openMenu(true);\n }\n };\n\n private handleChangeMenuState = (isOpened: boolean, restoreFocus: boolean): void => {\n this.setState({\n focusedByTab: !isOpened && restoreFocus,\n });\n };\n\n private handleFocus = () => {\n if (!this.props.disabled) {\n // focus event fires before keyDown eventlistener\n // so we should check tabPressed in async way\n this.globalObject.requestAnimationFrame?.(() => {\n if (this.keyListener.isTabPressed) {\n this.setState({ focusedByTab: true });\n }\n });\n }\n };\n\n private handleBlur = () => {\n this.setState({\n focusedByTab: false,\n });\n };\n\n private renderIcon() {\n const { icon = <KebabIcon /> } = this.getProps();\n\n if (isElement(icon) && isKonturIcon(icon)) {\n const iconProps = icon.props as IconProps;\n const sizes: Record<SizeProp, number> = {\n small: parseInt(this.theme.kebabIconSizeSmall),\n medium: parseInt(this.theme.kebabIconSizeMedium),\n large: parseInt(this.theme.kebabIconSizeLarge),\n };\n\n return React.cloneElement(icon, {\n size: iconProps.size ?? sizes[this.size],\n color: iconProps.color ?? this.theme.kebabIconColor,\n } as IconProps);\n }\n\n return icon;\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"Kebab.js","sourceRoot":"","sources":["../../../components/Kebab/Kebab.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAIrC,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,kBAAkB,EAAE,UAAU,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,0CAA0C,CAAC;AAChH,OAAO,KAAK,YAAY,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAC;AAE9D,OAAO,EAAE,SAAS,EAAE,MAAM,mCAAmC,CAAC;AAG9D,OAAO,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAC;AAEjE,OAAO,EAAE,SAAS,EAAE,MAAM,iCAAiC,CAAC;AAC5D,OAAO,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAC;AAEjE,OAAO,EAAE,aAAa,EAAE,MAAM,uCAAuC,CAAC;AAEtE,OAAO,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AACvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AAEnE,OAAO,EAAE,4BAA4B,EAAE,MAAM,oEAAoE,CAAC;AAClH,OAAO,EAAE,QAAQ,EAAE,MAAM,iCAAiC,CAAC;AAC3D,OAAO,EAAE,qBAAqB,EAAE,MAAM,sCAAsC,CAAC;AAG7E,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AA+B3C,MAAM,CAAC,IAAM,aAAa,GAAG;IAC3B,OAAO,EAAE,gBAAgB;CACjB,CAAC;AASX;;GAEG;AAIH;IAA2B,yBAAuC;IAAlE;;QAWU,cAAQ,GAAG,iBAAiB,CAAC,OAAK,CAAC,YAAY,CAAC,CAAC;QAElD,WAAK,GAAe;YACzB,YAAY,EAAE,KAAK;YACnB,MAAM,EAAE,IAAI;SACb,CAAC;QAYM,cAAQ,GAEZ;YACF,MAAM,EAAE,cAAM,OAAA,SAAS,EAAT,CAAS;SACxB,CAAC;QA6DM,mBAAa,GAAG,UAAC,YAAmC;YAClD,IAAA,QAAQ,GAAK,KAAI,CAAC,QAAQ,EAAE,SAApB,CAAqB;YACrC,IAAM,IAAI,GAAG,KAAI,CAAC,IAAI,CAAC;YACvB,IAAM,oBAAoB,GAAG,UAAC,KAA0C;gBACtE,IAAI,CAAC,QAAQ,EAAE,CAAC;oBACd,KAAI,CAAC,oBAAoB,CAAC,KAAK,EAAE,YAAY,CAAC,QAAQ,CAAC,CAAC;gBAC1D,CAAC;YACH,CAAC,CAAC;YAEF,IAAM,kBAAkB,GAAG;gBACzB,IAAI,CAAC,QAAQ,EAAE,CAAC;oBACd,YAAY,CAAC,UAAU,EAAE,CAAC;gBAC5B,CAAC;YACH,CAAC,CAAC;YAEF,OAAO,CACL,8BACE,IAAI,EAAC,QAAQ,cACH,aAAa,CAAC,OAAO,EAC/B,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAC3B,OAAO,EAAE,kBAAkB,EAC3B,SAAS,EAAE,oBAAoB,EAC/B,OAAO,EAAE,KAAI,CAAC,WAAW,EACzB,MAAM,EAAE,KAAI,CAAC,UAAU,EACvB,SAAS,EAAE,KAAI,CAAC,EAAE,CAChB,KAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAI,CAAC,KAAK,CAAC,EAC7B,IAAI,KAAK,OAAO,IAAI,KAAI,CAAC,MAAM,CAAC,UAAU,CAAC,KAAI,CAAC,KAAK,CAAC,EACtD,IAAI,KAAK,QAAQ,IAAI,KAAI,CAAC,MAAM,CAAC,WAAW,CAAC,KAAI,CAAC,KAAK,CAAC,EACxD,IAAI,KAAK,OAAO,IAAI,KAAI,CAAC,MAAM,CAAC,UAAU,CAAC,KAAI,CAAC,KAAK,CAAC,EACtD,YAAY,CAAC,MAAM,IAAI,KAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAI,CAAC,KAAK,CAAC,EACrD,QAAQ,IAAI,KAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,EAClC,KAAI,CAAC,KAAK,CAAC,YAAY,IAAI,KAAI,CAAC,MAAM,CAAC,OAAO,CAAC,KAAI,CAAC,KAAK,CAAC,CAC3D,sBACiB,KAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC,IAE/C,KAAI,CAAC,UAAU,EAAE,CACb,CACR,CAAC;QACJ,CAAC,CAAC;QAEM,0BAAoB,GAAG,UAC7B,CAAsC,EACtC,QAA2C;YAE3C,IAAI,QAAQ,CAAC,UAAU,EAAE,UAAU,EAAE,kBAAkB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC5D,CAAC,CAAC,cAAc,EAAE,CAAC;gBACnB,QAAQ,CAAC,IAAI,CAAC,CAAC;YACjB,CAAC;QACH,CAAC,CAAC;QAEM,2BAAqB,GAAG,UAAC,QAAiB,EAAE,YAAqB;YACvE,KAAI,CAAC,QAAQ,CAAC;gBACZ,YAAY,EAAE,CAAC,QAAQ,IAAI,YAAY;aACxC,CAAC,CAAC;QACL,CAAC,CAAC;QAEM,iBAAW,GAAG;;YACpB,IAAI,CAAC,KAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;gBACzB,iDAAiD;gBACjD,6CAA6C;gBAC7C,MAAA,MAAA,KAAI,CAAC,YAAY,EAAC,qBAAqB,mDAAG;oBACxC,IAAI,KAAI,CAAC,WAAW,CAAC,YAAY,EAAE,CAAC;wBAClC,KAAI,CAAC,QAAQ,CAAC,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC;oBACxC,CAAC;gBACH,CAAC,CAAC,CAAC;YACL,CAAC;QACH,CAAC,CAAC;QAEM,gBAAU,GAAG;YACnB,KAAI,CAAC,QAAQ,CAAC;gBACZ,YAAY,EAAE,KAAK;aACpB,CAAC,CAAC;QACL,CAAC,CAAC;;IAqBJ,CAAC;cA1LY,KAAK;IAkCT,iCAAiB,GAAxB;QACE,IAAI,CAAC,WAAW,GAAG,IAAI,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QACtD,4CAA4C;QAC5C,IAAI,CAAC,QAAQ,GAAG,YAAY,CAAC,WAAW,CAAC,cAAM,OAAA,SAAS,EAAT,CAAS,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;IAC/E,CAAC;IAEM,oCAAoB,GAA3B;QACE,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;IACzB,CAAC;IAEM,sBAAM,GAAb;QAAA,iBAsBC;QArBC,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAEtC,OAAO,CACL,oBAAC,YAAY,CAAC,QAAQ,QACnB,UAAC,KAAK;YACL,KAAI,CAAC,KAAK,GAAG,KAAK,CAAC;YACnB,OAAO,CACL,oBAAC,YAAY,CAAC,QAAQ,IACpB,KAAK,EAAE,YAAY,CAAC,MAAM,CACxB;oBACE,WAAW,EAAE,KAAK,CAAC,WAAW;iBAC/B,EACD,KAAK,CACN,IAEA,KAAI,CAAC,UAAU,EAAE,CACI,CACzB,CAAC;QACJ,CAAC,CACqB,CACzB,CAAC;IACJ,CAAC;IAEO,0BAAU,GAAlB;QACU,IAAA,QAAQ,GAAK,IAAI,CAAC,KAAK,SAAf,CAAgB;QAC1B,IAAA,KAAoD,IAAI,CAAC,QAAQ,EAAE,EAAjE,SAAS,eAAA,EAAE,iBAAiB,uBAAA,EAAE,MAAM,YAAA,EAAE,OAAO,aAAoB,CAAC;QAC1E,OAAO,CACL,oBAAC,aAAa,aAAC,WAAW,EAAE,IAAI,CAAC,WAAW,IAAM,IAAI,CAAC,KAAK,EAAM,4BAA4B,CAAC,EAAE,QAAQ,UAAA,EAAE,CAAC;YAC1G,oBAAC,SAAS,IACR,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,EACjB,WAAW,EAAE,KAAK,EAClB,kBAAkB,EAAE,IAAI,CAAC,KAAK,CAAC,kBAAkB,EACjD,SAAS,EAAE,SAAS,EACpB,iBAAiB,EAAE,IAAI,CAAC,qBAAqB,EAC7C,OAAO,EAAE,IAAI,CAAC,aAAa,EAC3B,iBAAiB,EAAE,iBAAiB,EACpC,aAAa,EAAE,IAAI,CAAC,KAAK,CAAC,aAAa,EACvC,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,OAAO,EAChB,WAAW,EAAE,IAAI,CAAC,KAAK,CAAC,WAAW,gBACvB,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAEnC,CAAC,QAAQ,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,CACvB,CACE,CACjB,CAAC;IACJ,CAAC;IA4EO,0BAAU,GAAlB;;QACU,IAAA,KAAyB,IAAI,CAAC,QAAQ,EAAE,KAApB,EAApB,IAAI,mBAAG,oBAAC,SAAS,OAAG,KAAA,CAAqB;QAEjD,IAAI,SAAS,CAAC,IAAI,CAAC,IAAI,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC;YAC1C,IAAM,SAAS,GAAG,IAAI,CAAC,KAAkB,CAAC;YAC1C,IAAM,KAAK,GAA6B;gBACtC,KAAK,EAAE,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC;gBAC9C,MAAM,EAAE,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,mBAAmB,CAAC;gBAChD,KAAK,EAAE,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC;aAC/C,CAAC;YAEF,OAAO,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE;gBAC9B,IAAI,EAAE,MAAA,SAAS,CAAC,IAAI,mCAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;gBACxC,KAAK,EAAE,MAAA,SAAS,CAAC,KAAK,mCAAI,IAAI,CAAC,KAAK,CAAC,cAAc;aACvC,CAAC,CAAC;QAClB,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;;IAxLa,yBAAmB,GAAG,OAAO,AAAV,CAAW;IAC9B,iBAAW,GAAG,OAAO,AAAV,CAAW;IAEtB,kBAAY,GAAiB;QACzC,MAAM,EAAE,cAAM,OAAA,SAAS,EAAT,CAAS;QACvB,OAAO,EAAE,cAAM,OAAA,SAAS,EAAT,CAAS;QACxB,SAAS,EAAE,CAAC,aAAa,EAAE,cAAc,EAAE,UAAU,EAAE,WAAW,CAAC;QACnE,iBAAiB,EAAE,SAAS;KAC7B,AALyB,CAKxB;IATS,KAAK;QAHjB,qBAAqB;QACrB,QAAQ;QACR,QAAQ;OACI,KAAK,CA0LjB;IAAD,YAAC;CAAA,AA1LD,CAA2B,KAAK,CAAC,SAAS,GA0LzC;SA1LY,KAAK","sourcesContent":["import type { AriaAttributes, HTMLAttributes, JSX } from 'react';\nimport React from 'react';\nimport { isElement } from 'react-is';\nimport type { Emotion } from '@emotion/css/create-instance';\n\nimport type { GlobalObject } from '../../lib/globalObject.js';\nimport { isKonturIcon } from '../../lib/utils.js';\nimport { isKeyArrowVertical, isKeyEnter, isKeySpace, someKeys } from '../../lib/events/keyboard/identifiers.js';\nimport * as LayoutEvents from '../../lib/LayoutEvents.js';\nimport { KeyListener } from '../../lib/events/keyListener.js';\nimport type { PopupMenuCaptionProps, PopupMenuProps } from '../../internal/PopupMenu/index.js';\nimport { PopupMenu } from '../../internal/PopupMenu/index.js';\nimport type { Nullable } from '../../typings/utility-types.js';\nimport type { PopupPositionsType } from '../../internal/Popup/index.js';\nimport { ThemeContext } from '../../lib/theming/ThemeContext.js';\nimport type { Theme } from '../../lib/theming/Theme.js';\nimport { isTestEnv } from '../../lib/currentEnvironment.js';\nimport { ThemeFactory } from '../../lib/theming/ThemeFactory.js';\nimport type { CommonProps } from '../../internal/CommonWrapper/index.js';\nimport { CommonWrapper } from '../../internal/CommonWrapper/index.js';\nimport type { TGetRootNode, TSetRootNode } from '../../lib/rootNode/index.js';\nimport { rootNode } from '../../lib/rootNode/index.js';\nimport { createPropsGetter } from '../../lib/createPropsGetter.js';\nimport type { SizeProp } from '../../lib/types/props.js';\nimport { getVisualStateDataAttributes } from '../../internal/CommonWrapper/utils/getVisualStateDataAttributes.js';\nimport { withSize } from '../../lib/size/SizeDecorator.js';\nimport { withRenderEnvironment } from '../../lib/renderEnvironment/index.js';\nimport type { IconProps } from '../../internal/icons2022/BaseIcon.js';\n\nimport { getStyles } from './Kebab.styles.js';\nimport { KebabIcon } from './KebabIcon.js';\n\nexport interface KebabProps\n extends Pick<AriaAttributes, 'aria-label'>,\n Pick<HTMLAttributes<HTMLElement>, 'id'>,\n Pick<PopupMenuProps, 'onOpen' | 'onClose' | 'popupMenuId' | 'preventIconsOffset'>,\n CommonProps {\n /** Размер кнопки. */\n size?: SizeProp;\n\n /** Список доступных позиций выпадающего меню относительно кнопки.\n * @default ['bottom left', 'bottom right', 'top left', 'top right'].\n */\n positions?: PopupPositionsType[];\n\n /** Максимальная высота меню. */\n menuMaxHeight?: number | string;\n\n /** Блокирует кнопку. */\n disabled?: boolean;\n\n /** Отключает анимацию выпадающего меню. */\n disableAnimations?: boolean;\n\n /** Заменяет иконку кебаба у кнопки. */\n icon?: React.ReactNode;\n\n /** @ignore */\n 'aria-describedby'?: AriaAttributes['aria-describedby'];\n}\n\nexport const KebabDataTids = {\n caption: 'Kebab__caption',\n} as const;\n\nexport interface KebabState {\n anchor: Nullable<HTMLElement>;\n focusedByTab: boolean;\n}\n\ntype DefaultProps = Required<Pick<KebabProps, 'onOpen' | 'onClose' | 'positions' | 'disableAnimations'>>;\n\n/**\n * Кебаб-меню содержит действия с объектом.\n */\n@withRenderEnvironment\n@rootNode\n@withSize\nexport class Kebab extends React.Component<KebabProps, KebabState> {\n public static __KONTUR_REACT_UI__ = 'Kebab';\n public static displayName = 'Kebab';\n\n public static defaultProps: DefaultProps = {\n onOpen: () => undefined,\n onClose: () => undefined,\n positions: ['bottom left', 'bottom right', 'top left', 'top right'],\n disableAnimations: isTestEnv,\n };\n\n private getProps = createPropsGetter(Kebab.defaultProps);\n\n public state: KebabState = {\n focusedByTab: false,\n anchor: null,\n };\n\n private globalObject!: GlobalObject;\n private emotion!: Emotion;\n private cx!: Emotion['cx'];\n private styles!: ReturnType<typeof getStyles>;\n private theme!: Theme;\n private size!: SizeProp;\n public getRootNode!: TGetRootNode;\n private setRootNode!: TSetRootNode;\n private keyListener!: KeyListener;\n\n private listener: {\n remove: () => void;\n } = {\n remove: () => undefined,\n };\n\n public componentDidMount() {\n this.keyListener = new KeyListener(this.globalObject);\n /** addListener'у нужен колбэк в аргумент */\n this.listener = LayoutEvents.addListener(() => undefined, this.globalObject);\n }\n\n public componentWillUnmount() {\n this.listener.remove();\n }\n\n public render(): JSX.Element {\n this.styles = getStyles(this.emotion);\n\n return (\n <ThemeContext.Consumer>\n {(theme) => {\n this.theme = theme;\n return (\n <ThemeContext.Provider\n value={ThemeFactory.create(\n {\n popupMargin: theme.kebabMargin,\n },\n theme,\n )}\n >\n {this.renderMain()}\n </ThemeContext.Provider>\n );\n }}\n </ThemeContext.Consumer>\n );\n }\n\n private renderMain() {\n const { disabled } = this.props;\n const { positions, disableAnimations, onOpen, onClose } = this.getProps();\n return (\n <CommonWrapper rootNodeRef={this.setRootNode} {...this.props} {...getVisualStateDataAttributes({ disabled })}>\n <PopupMenu\n id={this.props.id}\n popupHasPin={false}\n preventIconsOffset={this.props.preventIconsOffset}\n positions={positions}\n onChangeMenuState={this.handleChangeMenuState}\n caption={this.renderCaption}\n disableAnimations={disableAnimations}\n menuMaxHeight={this.props.menuMaxHeight}\n onOpen={onOpen}\n onClose={onClose}\n popupMenuId={this.props.popupMenuId}\n aria-label={this.props['aria-label']}\n >\n {!disabled && this.props.children}\n </PopupMenu>\n </CommonWrapper>\n );\n }\n\n private renderCaption = (captionProps: PopupMenuCaptionProps) => {\n const { disabled } = this.getProps();\n const size = this.size;\n const handleCaptionKeyDown = (event: React.KeyboardEvent<HTMLDivElement>) => {\n if (!disabled) {\n this.handleCaptionKeyDown(event, captionProps.openMenu);\n }\n };\n\n const handleCaptionClick = () => {\n if (!disabled) {\n captionProps.toggleMenu();\n }\n };\n\n return (\n <span\n role=\"button\"\n data-tid={KebabDataTids.caption}\n tabIndex={disabled ? -1 : 0}\n onClick={handleCaptionClick}\n onKeyDown={handleCaptionKeyDown}\n onFocus={this.handleFocus}\n onBlur={this.handleBlur}\n className={this.cx(\n this.styles.kebab(this.theme),\n size === 'small' && this.styles.kebabSmall(this.theme),\n size === 'medium' && this.styles.kebabMedium(this.theme),\n size === 'large' && this.styles.kebabLarge(this.theme),\n captionProps.opened && this.styles.opened(this.theme),\n disabled && this.styles.disabled(),\n this.state.focusedByTab && this.styles.focused(this.theme),\n )}\n aria-describedby={this.props['aria-describedby']}\n >\n {this.renderIcon()}\n </span>\n );\n };\n\n private handleCaptionKeyDown = (\n e: React.KeyboardEvent<HTMLDivElement>,\n openMenu: PopupMenuCaptionProps['openMenu'],\n ) => {\n if (someKeys(isKeyEnter, isKeySpace, isKeyArrowVertical)(e)) {\n e.preventDefault();\n openMenu(true);\n }\n };\n\n private handleChangeMenuState = (isOpened: boolean, restoreFocus: boolean): void => {\n this.setState({\n focusedByTab: !isOpened && restoreFocus,\n });\n };\n\n private handleFocus = () => {\n if (!this.props.disabled) {\n // focus event fires before keyDown eventlistener\n // so we should check tabPressed in async way\n this.globalObject.requestAnimationFrame?.(() => {\n if (this.keyListener.isTabPressed) {\n this.setState({ focusedByTab: true });\n }\n });\n }\n };\n\n private handleBlur = () => {\n this.setState({\n focusedByTab: false,\n });\n };\n\n private renderIcon() {\n const { icon = <KebabIcon /> } = this.getProps();\n\n if (isElement(icon) && isKonturIcon(icon)) {\n const iconProps = icon.props as IconProps;\n const sizes: Record<SizeProp, number> = {\n small: parseInt(this.theme.kebabIconSizeSmall),\n medium: parseInt(this.theme.kebabIconSizeMedium),\n large: parseInt(this.theme.kebabIconSizeLarge),\n };\n\n return React.cloneElement(icon, {\n size: iconProps.size ?? sizes[this.size],\n color: iconProps.color ?? this.theme.kebabIconColor,\n } as IconProps);\n }\n\n return icon;\n }\n}\n"]}
|
|
@@ -8,22 +8,22 @@ export type LoaderType = (typeof types)[number];
|
|
|
8
8
|
export interface LoaderProps extends CommonProps {
|
|
9
9
|
/** @ignore */
|
|
10
10
|
children?: React.ReactNode;
|
|
11
|
-
/**
|
|
11
|
+
/** Показывает лоадер.
|
|
12
12
|
* @default false */
|
|
13
13
|
active?: boolean;
|
|
14
|
-
/**
|
|
15
|
-
* @default "
|
|
14
|
+
/** Подпись под спиннером.
|
|
15
|
+
* @default ""
|
|
16
16
|
*/
|
|
17
17
|
caption?: SpinnerProps['caption'];
|
|
18
18
|
/** Задает компонент, заменяющий спиннер. */
|
|
19
19
|
component?: React.ReactNode;
|
|
20
|
-
/**
|
|
20
|
+
/** Размер спиннера и текста.
|
|
21
21
|
* @default normal. */
|
|
22
22
|
type?: LoaderType;
|
|
23
|
-
/**
|
|
23
|
+
/** Время в миллисекундах для показа вуали без спиннера.
|
|
24
24
|
* @default 300 */
|
|
25
25
|
delayBeforeSpinnerShow?: number;
|
|
26
|
-
/**
|
|
26
|
+
/** Минимальное время в миллисекундах для показа спиннера.
|
|
27
27
|
* @default 1000. */
|
|
28
28
|
minimalDelayBeforeSpinnerHide?: number;
|
|
29
29
|
}
|
|
@@ -40,9 +40,9 @@ export declare const LoaderDataTids: {
|
|
|
40
40
|
};
|
|
41
41
|
type DefaultProps = Required<Pick<LoaderProps, 'type' | 'active' | 'delayBeforeSpinnerShow' | 'minimalDelayBeforeSpinnerHide'>>;
|
|
42
42
|
/**
|
|
43
|
-
*
|
|
44
|
-
*
|
|
45
|
-
*
|
|
43
|
+
* С помощью лоадера можно отобразить процесс выполнения задачи.
|
|
44
|
+
* Лоадер принимает в качестве дочернего элемента другой компонент или контент, который будет показан на экране.
|
|
45
|
+
* Когда происходит загрузка, поверх этого компонента или контента будет отображаться [Спиннер](https://tech.skbkontur.ru/kontur-ui/?path=/docs/react-ui_display-data-spinner--docs).
|
|
46
46
|
*/
|
|
47
47
|
export declare class Loader extends React.Component<LoaderProps, LoaderState> {
|
|
48
48
|
static __KONTUR_REACT_UI__: string;
|
|
@@ -53,9 +53,9 @@ export var LoaderDataTids = {
|
|
|
53
53
|
spinner: 'Loader__Spinner',
|
|
54
54
|
};
|
|
55
55
|
/**
|
|
56
|
-
*
|
|
57
|
-
*
|
|
58
|
-
*
|
|
56
|
+
* С помощью лоадера можно отобразить процесс выполнения задачи.
|
|
57
|
+
* Лоадер принимает в качестве дочернего элемента другой компонент или контент, который будет показан на экране.
|
|
58
|
+
* Когда происходит загрузка, поверх этого компонента или контента будет отображаться [Спиннер](https://tech.skbkontur.ru/kontur-ui/?path=/docs/react-ui_display-data-spinner--docs).
|
|
59
59
|
*/
|
|
60
60
|
var Loader = /** @class */ (function (_super) {
|
|
61
61
|
__extends(Loader, _super);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Loader.js","sourceRoot":"","sources":["../../../components/Loader/Loader.tsx"],"names":[],"mappings":"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","sourcesContent":["import React from 'react';\nimport debounce from 'lodash.debounce';\nimport type { Emotion } from '@emotion/css/create-instance';\n\nimport { isBrowser } from '../../lib/globalObject.js';\nimport type { GlobalObject } from '../../lib/globalObject.js';\nimport type { AnyObject } from '../../lib/utils.js';\nimport * as LayoutEvents from '../../lib/LayoutEvents.js';\nimport type { SpinnerProps } from '../Spinner/index.js';\nimport { Spinner } from '../Spinner/index.js';\nimport type { Nullable } from '../../typings/utility-types.js';\nimport { ThemeContext } from '../../lib/theming/ThemeContext.js';\nimport type { Theme } from '../../lib/theming/Theme.js';\nimport { ZIndex } from '../../internal/ZIndex/index.js';\nimport type { CommonProps } from '../../internal/CommonWrapper/index.js';\nimport { CommonWrapper } from '../../internal/CommonWrapper/index.js';\nimport { isTestEnv } from '../../lib/currentEnvironment.js';\nimport { TaskWithDelayAndMinimalDuration } from '../../lib/taskWithDelayAndMinimalDuration.js';\nimport { getTabbableElements } from '../../lib/dom/tabbableHelpers.js';\nimport type { TGetRootNode, TSetRootNode } from '../../lib/rootNode/index.js';\nimport { rootNode } from '../../lib/rootNode/index.js';\nimport { getDOMRect } from '../../lib/dom/getDOMRect.js';\nimport { createPropsGetter } from '../../lib/createPropsGetter.js';\nimport { withRenderEnvironment } from '../../lib/renderEnvironment/index.js';\n\nimport { getStyles } from './Loader.styles.js';\n\nconst types = ['mini', 'normal', 'big'] as const;\n\nexport type LoaderType = (typeof types)[number];\n\nexport interface LoaderProps extends CommonProps {\n /** @ignore */\n children?: React.ReactNode;\n\n /** Задает состояние лоадера.\n * @default false */\n active?: boolean;\n\n /** Задает подпись под спиннером.\n * @default \"Загрузка\"\n */\n caption?: SpinnerProps['caption'];\n\n /** Задает компонент, заменяющий спиннер. */\n component?: React.ReactNode;\n\n /** Задает размер спиннера и текста.\n * @default normal. */\n type?: LoaderType;\n\n /** Устанавливает время в миллисекундах для показа вуали без спиннера.\n * @default 300 */\n delayBeforeSpinnerShow?: number;\n\n /** Устанавливает минимальное время в миллисекундах для показа спиннера.\n * @default 1000. */\n minimalDelayBeforeSpinnerHide?: number;\n}\n\nexport interface LoaderState {\n isStickySpinner: boolean;\n isSpinnerVisible: boolean;\n isLoaderActive: boolean;\n spinnerStyle?: AnyObject;\n}\n\nexport const LoaderDataTids = {\n idle: 'Loader__Idle',\n veil: 'Loader__Veil',\n spinner: 'Loader__Spinner',\n} as const;\n\ntype DefaultProps = Required<\n Pick<LoaderProps, 'type' | 'active' | 'delayBeforeSpinnerShow' | 'minimalDelayBeforeSpinnerHide'>\n>;\n\n/**\n * Компонент `Loader` принимает внутрь себя контент, поверх которого в активном состоянии `Loader`'а будет отрисован спиннер.\n *\n * Если вам нужен только сам спиннер без дополнительного функционала - используйте компонент Spinner.\n */\n@withRenderEnvironment\n@rootNode\nexport class Loader extends React.Component<LoaderProps, LoaderState> {\n public static __KONTUR_REACT_UI__ = 'Loader';\n public static displayName = 'Loader';\n\n public static defaultProps: DefaultProps = {\n type: 'normal',\n active: false,\n delayBeforeSpinnerShow: isTestEnv ? 0 : 300,\n minimalDelayBeforeSpinnerHide: isTestEnv ? 0 : 1000,\n };\n\n private getProps = createPropsGetter(Loader.defaultProps);\n\n private globalObject!: GlobalObject;\n private emotion!: Emotion;\n private cx!: Emotion['cx'];\n private styles!: ReturnType<typeof getStyles>;\n private theme!: Theme;\n public getRootNode!: TGetRootNode;\n private setRootNode!: TSetRootNode;\n private spinnerContainerNode: Nullable<HTMLDivElement>;\n private childrenContainerNode: Nullable<HTMLDivElement>;\n private spinnerNode: Nullable<HTMLDivElement>;\n private layoutEvents: Nullable<{ remove: () => void }>;\n private spinnerTask!: TaskWithDelayAndMinimalDuration;\n private childrenObserver: Nullable<MutationObserver>;\n\n constructor(props: LoaderProps) {\n super(props);\n\n this.spinnerContainerNode = null;\n this.childrenContainerNode = null;\n this.childrenObserver = null;\n this.spinnerNode = null;\n\n this.state = {\n isStickySpinner: false,\n isSpinnerVisible: false,\n isLoaderActive: false,\n };\n }\n\n public componentDidMount() {\n this.spinnerTask = new TaskWithDelayAndMinimalDuration({\n delayBeforeTaskStart: this.getProps().delayBeforeSpinnerShow,\n durationOfTask: this.getProps().minimalDelayBeforeSpinnerHide,\n taskStartCallback: () => this.setState({ isSpinnerVisible: true }),\n taskStopCallback: () => this.setState({ isSpinnerVisible: false }),\n });\n const active = this.getProps().active;\n this.checkSpinnerPosition();\n active && this.spinnerTask.start();\n this.layoutEvents = LayoutEvents.addListener(debounce(this.checkSpinnerPosition, 10), this.globalObject);\n\n if (active) {\n this.disableChildrenFocus();\n }\n }\n\n public componentDidUpdate(prevProps: Readonly<LoaderProps>, prevState: Readonly<LoaderState>) {\n const { component } = this.props;\n const { active, delayBeforeSpinnerShow, minimalDelayBeforeSpinnerHide } = this.getProps();\n const { isLoaderActive } = this.state;\n\n if ((active && !prevProps.active) || prevProps.component !== component) {\n this.checkSpinnerPosition();\n }\n\n if (\n delayBeforeSpinnerShow !== prevProps.delayBeforeSpinnerShow ||\n minimalDelayBeforeSpinnerHide !== prevProps.minimalDelayBeforeSpinnerHide\n ) {\n this.spinnerTask.update({\n delayBeforeTaskStart: delayBeforeSpinnerShow,\n durationOfTask: minimalDelayBeforeSpinnerHide,\n });\n }\n\n if (active !== prevProps.active) {\n active ? this.spinnerTask.start() : this.spinnerTask.stop();\n }\n\n if (isLoaderActive !== prevState.isLoaderActive) {\n if (isLoaderActive) {\n this.disableChildrenFocus();\n } else {\n this.enableChildrenFocus();\n }\n }\n }\n\n public componentWillUnmount() {\n this.makeUnobservable();\n if (this.layoutEvents) {\n this.layoutEvents.remove();\n }\n this.spinnerTask.clearTask();\n }\n\n public static getDerivedStateFromProps(props: LoaderProps, state: LoaderState): Partial<LoaderState> {\n if (props.active && !state.isLoaderActive) {\n return {\n isLoaderActive: true,\n };\n }\n if (state.isLoaderActive && !(props.active || state.isSpinnerVisible)) {\n return {\n isLoaderActive: false,\n };\n }\n\n return state;\n }\n\n public render(): React.JSX.Element {\n this.styles = getStyles(this.emotion);\n\n return (\n <ThemeContext.Consumer>\n {(theme) => {\n this.theme = theme;\n return this.renderMain();\n }}\n </ThemeContext.Consumer>\n );\n }\n\n private renderMain() {\n const { caption, component } = this.props;\n const type = this.getProps().type;\n const { isLoaderActive } = this.state;\n\n return (\n <CommonWrapper rootNodeRef={this.setRootNode} {...this.props}>\n <div\n className={this.styles.loader()}\n data-tid={this.props['data-tid'] || (isLoaderActive ? LoaderDataTids.veil : LoaderDataTids.idle)}\n >\n <ZIndex\n applyZIndex={isLoaderActive}\n coverChildren={isLoaderActive}\n style={{ height: '100%' }}\n wrapperRef={this.childrenRef}\n >\n {this.props.children}\n </ZIndex>\n {isLoaderActive && (\n <ZIndex\n wrapperRef={this.spinnerRef}\n className={this.cx({\n [this.styles.active(this.theme)]: isLoaderActive,\n })}\n >\n {this.state.isSpinnerVisible && this.renderSpinner(type, caption, component)}\n </ZIndex>\n )}\n </div>\n </CommonWrapper>\n );\n }\n\n private childrenRef = (element: HTMLDivElement | null) => {\n this.childrenContainerNode = element;\n };\n\n private spinnerRef = (element: HTMLDivElement | null) => {\n this.spinnerContainerNode = element;\n };\n\n private renderSpinner(type?: LoaderType, caption?: React.ReactNode, component?: React.ReactNode) {\n return (\n <span\n data-tid={LoaderDataTids.spinner}\n className={this.cx(this.styles.spinnerContainer(), {\n [this.styles.spinnerContainerSticky()]: this.state.isStickySpinner,\n })}\n style={this.state.spinnerStyle}\n >\n <div\n className={this.styles.spinnerComponentWrapper()}\n ref={(element) => {\n this.spinnerNode = element;\n }}\n >\n {component !== undefined ? component : <Spinner type={type} caption={caption} />}\n </div>\n </span>\n );\n }\n\n private checkSpinnerPosition = () => {\n if (!this.spinnerContainerNode || !isBrowser(this.globalObject)) {\n return;\n }\n\n const {\n top: containerTop,\n right: containerRight,\n bottom: containerBottom,\n left: containerLeft,\n height: containerHeight,\n width: containerWidth,\n } = getDOMRect(this.spinnerContainerNode);\n\n const windowHeight = this.globalObject.innerHeight;\n const windowWidth = this.globalObject.innerWidth;\n\n // Если контейнер не больше высоты и не шире окна,\n // то просто выравниваем по центру\n if (windowHeight >= containerHeight && windowWidth >= containerWidth) {\n this.setState({\n isStickySpinner: false,\n spinnerStyle: {},\n });\n return;\n }\n\n const spinnerStyle: {\n top?: number;\n right: number;\n bottom: number;\n left: number;\n } = {\n top: 30,\n right: 0,\n bottom: 30,\n left: 0,\n };\n\n // ПО ВЕРТИКАЛИ\n // Если верхний край контейнера ниже верхнего края окна,\n // то сдвигаем и лоадер\n if (containerTop > 0) {\n spinnerStyle.top = containerTop + 30;\n }\n\n // Если нижний край контейнера выше нижнего края окна,\n // то сдвигаем и лоадер\n if (containerBottom < windowHeight) {\n spinnerStyle.bottom = Math.abs(windowHeight - containerBottom) + 30;\n }\n\n // Если знаем высоту спиннера и нижний край контейнера поднимается\n // выше отступа на высоту спиннера, то убираем верхнюю позицию лоадера\n\n const spinnerHeight = getDOMRect(this.spinnerNode).height;\n\n if (spinnerHeight && spinnerStyle.bottom >= windowHeight - spinnerHeight) {\n delete spinnerStyle.top;\n }\n\n // ПО ГОРИЗОНТАЛИ\n // Если левый край контейнера правее левого края окна,\n // то сдвигаем и лоадер\n if (containerLeft > 0) {\n spinnerStyle.left = containerLeft;\n }\n\n // Если правый край контейнера левее правого края окна,\n // то сдвигаем и лоадер\n if (containerRight < windowWidth) {\n spinnerStyle.right = windowWidth - containerRight;\n }\n\n this.setState({\n isStickySpinner: true,\n spinnerStyle,\n });\n };\n\n private disableChildrenFocus = () => {\n if (!this.childrenObserver) {\n this.makeObservable();\n }\n const tabbableElements = getTabbableElements(this.childrenContainerNode);\n tabbableElements.forEach((el) => {\n if (!el.hasAttribute('origin-tabindex')) {\n el.setAttribute('origin-tabindex', el.tabIndex.toString());\n }\n el.tabIndex = -1;\n });\n };\n\n private enableChildrenFocus = () => {\n this.makeUnobservable();\n\n this.globalObject.document?.querySelectorAll('[origin-tabindex]').forEach((el) => {\n el.setAttribute('tabindex', el.getAttribute('origin-tabindex') ?? '0');\n el.removeAttribute('origin-tabindex');\n });\n };\n\n private makeObservable = () => {\n const target = this.childrenContainerNode;\n if (!target || !this.globalObject.MutationObserver) {\n return;\n }\n const config = {\n childList: true,\n subtree: true,\n };\n const observer = new this.globalObject.MutationObserver(this.disableChildrenFocus);\n observer.observe(target, config);\n this.childrenObserver = observer;\n };\n\n private makeUnobservable = () => {\n this.childrenObserver?.disconnect();\n this.childrenObserver = null;\n };\n}\n"]}
|
|
1
|
+
{"version":3,"file":"Loader.js","sourceRoot":"","sources":["../../../components/Loader/Loader.tsx"],"names":[],"mappings":"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","sourcesContent":["import React from 'react';\nimport debounce from 'lodash.debounce';\nimport type { Emotion } from '@emotion/css/create-instance';\n\nimport { isBrowser } from '../../lib/globalObject.js';\nimport type { GlobalObject } from '../../lib/globalObject.js';\nimport type { AnyObject } from '../../lib/utils.js';\nimport * as LayoutEvents from '../../lib/LayoutEvents.js';\nimport type { SpinnerProps } from '../Spinner/index.js';\nimport { Spinner } from '../Spinner/index.js';\nimport type { Nullable } from '../../typings/utility-types.js';\nimport { ThemeContext } from '../../lib/theming/ThemeContext.js';\nimport type { Theme } from '../../lib/theming/Theme.js';\nimport { ZIndex } from '../../internal/ZIndex/index.js';\nimport type { CommonProps } from '../../internal/CommonWrapper/index.js';\nimport { CommonWrapper } from '../../internal/CommonWrapper/index.js';\nimport { isTestEnv } from '../../lib/currentEnvironment.js';\nimport { TaskWithDelayAndMinimalDuration } from '../../lib/taskWithDelayAndMinimalDuration.js';\nimport { getTabbableElements } from '../../lib/dom/tabbableHelpers.js';\nimport type { TGetRootNode, TSetRootNode } from '../../lib/rootNode/index.js';\nimport { rootNode } from '../../lib/rootNode/index.js';\nimport { getDOMRect } from '../../lib/dom/getDOMRect.js';\nimport { createPropsGetter } from '../../lib/createPropsGetter.js';\nimport { withRenderEnvironment } from '../../lib/renderEnvironment/index.js';\n\nimport { getStyles } from './Loader.styles.js';\n\nconst types = ['mini', 'normal', 'big'] as const;\n\nexport type LoaderType = (typeof types)[number];\n\nexport interface LoaderProps extends CommonProps {\n /** @ignore */\n children?: React.ReactNode;\n\n /** Показывает лоадер.\n * @default false */\n active?: boolean;\n\n /** Подпись под спиннером.\n * @default \"\"\n */\n caption?: SpinnerProps['caption'];\n\n /** Задает компонент, заменяющий спиннер. */\n component?: React.ReactNode;\n\n /** Размер спиннера и текста.\n * @default normal. */\n type?: LoaderType;\n\n /** Время в миллисекундах для показа вуали без спиннера.\n * @default 300 */\n delayBeforeSpinnerShow?: number;\n\n /** Минимальное время в миллисекундах для показа спиннера.\n * @default 1000. */\n minimalDelayBeforeSpinnerHide?: number;\n}\n\nexport interface LoaderState {\n isStickySpinner: boolean;\n isSpinnerVisible: boolean;\n isLoaderActive: boolean;\n spinnerStyle?: AnyObject;\n}\n\nexport const LoaderDataTids = {\n idle: 'Loader__Idle',\n veil: 'Loader__Veil',\n spinner: 'Loader__Spinner',\n} as const;\n\ntype DefaultProps = Required<\n Pick<LoaderProps, 'type' | 'active' | 'delayBeforeSpinnerShow' | 'minimalDelayBeforeSpinnerHide'>\n>;\n\n/**\n * С помощью лоадера можно отобразить процесс выполнения задачи.\n * Лоадер принимает в качестве дочернего элемента другой компонент или контент, который будет показан на экране.\n * Когда происходит загрузка, поверх этого компонента или контента будет отображаться [Спиннер](https://tech.skbkontur.ru/kontur-ui/?path=/docs/react-ui_display-data-spinner--docs).\n */\n@withRenderEnvironment\n@rootNode\nexport class Loader extends React.Component<LoaderProps, LoaderState> {\n public static __KONTUR_REACT_UI__ = 'Loader';\n public static displayName = 'Loader';\n\n public static defaultProps: DefaultProps = {\n type: 'normal',\n active: false,\n delayBeforeSpinnerShow: isTestEnv ? 0 : 300,\n minimalDelayBeforeSpinnerHide: isTestEnv ? 0 : 1000,\n };\n\n private getProps = createPropsGetter(Loader.defaultProps);\n\n private globalObject!: GlobalObject;\n private emotion!: Emotion;\n private cx!: Emotion['cx'];\n private styles!: ReturnType<typeof getStyles>;\n private theme!: Theme;\n public getRootNode!: TGetRootNode;\n private setRootNode!: TSetRootNode;\n private spinnerContainerNode: Nullable<HTMLDivElement>;\n private childrenContainerNode: Nullable<HTMLDivElement>;\n private spinnerNode: Nullable<HTMLDivElement>;\n private layoutEvents: Nullable<{ remove: () => void }>;\n private spinnerTask!: TaskWithDelayAndMinimalDuration;\n private childrenObserver: Nullable<MutationObserver>;\n\n constructor(props: LoaderProps) {\n super(props);\n\n this.spinnerContainerNode = null;\n this.childrenContainerNode = null;\n this.childrenObserver = null;\n this.spinnerNode = null;\n\n this.state = {\n isStickySpinner: false,\n isSpinnerVisible: false,\n isLoaderActive: false,\n };\n }\n\n public componentDidMount() {\n this.spinnerTask = new TaskWithDelayAndMinimalDuration({\n delayBeforeTaskStart: this.getProps().delayBeforeSpinnerShow,\n durationOfTask: this.getProps().minimalDelayBeforeSpinnerHide,\n taskStartCallback: () => this.setState({ isSpinnerVisible: true }),\n taskStopCallback: () => this.setState({ isSpinnerVisible: false }),\n });\n const active = this.getProps().active;\n this.checkSpinnerPosition();\n active && this.spinnerTask.start();\n this.layoutEvents = LayoutEvents.addListener(debounce(this.checkSpinnerPosition, 10), this.globalObject);\n\n if (active) {\n this.disableChildrenFocus();\n }\n }\n\n public componentDidUpdate(prevProps: Readonly<LoaderProps>, prevState: Readonly<LoaderState>) {\n const { component } = this.props;\n const { active, delayBeforeSpinnerShow, minimalDelayBeforeSpinnerHide } = this.getProps();\n const { isLoaderActive } = this.state;\n\n if ((active && !prevProps.active) || prevProps.component !== component) {\n this.checkSpinnerPosition();\n }\n\n if (\n delayBeforeSpinnerShow !== prevProps.delayBeforeSpinnerShow ||\n minimalDelayBeforeSpinnerHide !== prevProps.minimalDelayBeforeSpinnerHide\n ) {\n this.spinnerTask.update({\n delayBeforeTaskStart: delayBeforeSpinnerShow,\n durationOfTask: minimalDelayBeforeSpinnerHide,\n });\n }\n\n if (active !== prevProps.active) {\n active ? this.spinnerTask.start() : this.spinnerTask.stop();\n }\n\n if (isLoaderActive !== prevState.isLoaderActive) {\n if (isLoaderActive) {\n this.disableChildrenFocus();\n } else {\n this.enableChildrenFocus();\n }\n }\n }\n\n public componentWillUnmount() {\n this.makeUnobservable();\n if (this.layoutEvents) {\n this.layoutEvents.remove();\n }\n this.spinnerTask.clearTask();\n }\n\n public static getDerivedStateFromProps(props: LoaderProps, state: LoaderState): Partial<LoaderState> {\n if (props.active && !state.isLoaderActive) {\n return {\n isLoaderActive: true,\n };\n }\n if (state.isLoaderActive && !(props.active || state.isSpinnerVisible)) {\n return {\n isLoaderActive: false,\n };\n }\n\n return state;\n }\n\n public render(): React.JSX.Element {\n this.styles = getStyles(this.emotion);\n\n return (\n <ThemeContext.Consumer>\n {(theme) => {\n this.theme = theme;\n return this.renderMain();\n }}\n </ThemeContext.Consumer>\n );\n }\n\n private renderMain() {\n const { caption, component } = this.props;\n const type = this.getProps().type;\n const { isLoaderActive } = this.state;\n\n return (\n <CommonWrapper rootNodeRef={this.setRootNode} {...this.props}>\n <div\n className={this.styles.loader()}\n data-tid={this.props['data-tid'] || (isLoaderActive ? LoaderDataTids.veil : LoaderDataTids.idle)}\n >\n <ZIndex\n applyZIndex={isLoaderActive}\n coverChildren={isLoaderActive}\n style={{ height: '100%' }}\n wrapperRef={this.childrenRef}\n >\n {this.props.children}\n </ZIndex>\n {isLoaderActive && (\n <ZIndex\n wrapperRef={this.spinnerRef}\n className={this.cx({\n [this.styles.active(this.theme)]: isLoaderActive,\n })}\n >\n {this.state.isSpinnerVisible && this.renderSpinner(type, caption, component)}\n </ZIndex>\n )}\n </div>\n </CommonWrapper>\n );\n }\n\n private childrenRef = (element: HTMLDivElement | null) => {\n this.childrenContainerNode = element;\n };\n\n private spinnerRef = (element: HTMLDivElement | null) => {\n this.spinnerContainerNode = element;\n };\n\n private renderSpinner(type?: LoaderType, caption?: React.ReactNode, component?: React.ReactNode) {\n return (\n <span\n data-tid={LoaderDataTids.spinner}\n className={this.cx(this.styles.spinnerContainer(), {\n [this.styles.spinnerContainerSticky()]: this.state.isStickySpinner,\n })}\n style={this.state.spinnerStyle}\n >\n <div\n className={this.styles.spinnerComponentWrapper()}\n ref={(element) => {\n this.spinnerNode = element;\n }}\n >\n {component !== undefined ? component : <Spinner type={type} caption={caption} />}\n </div>\n </span>\n );\n }\n\n private checkSpinnerPosition = () => {\n if (!this.spinnerContainerNode || !isBrowser(this.globalObject)) {\n return;\n }\n\n const {\n top: containerTop,\n right: containerRight,\n bottom: containerBottom,\n left: containerLeft,\n height: containerHeight,\n width: containerWidth,\n } = getDOMRect(this.spinnerContainerNode);\n\n const windowHeight = this.globalObject.innerHeight;\n const windowWidth = this.globalObject.innerWidth;\n\n // Если контейнер не больше высоты и не шире окна,\n // то просто выравниваем по центру\n if (windowHeight >= containerHeight && windowWidth >= containerWidth) {\n this.setState({\n isStickySpinner: false,\n spinnerStyle: {},\n });\n return;\n }\n\n const spinnerStyle: {\n top?: number;\n right: number;\n bottom: number;\n left: number;\n } = {\n top: 30,\n right: 0,\n bottom: 30,\n left: 0,\n };\n\n // ПО ВЕРТИКАЛИ\n // Если верхний край контейнера ниже верхнего края окна,\n // то сдвигаем и лоадер\n if (containerTop > 0) {\n spinnerStyle.top = containerTop + 30;\n }\n\n // Если нижний край контейнера выше нижнего края окна,\n // то сдвигаем и лоадер\n if (containerBottom < windowHeight) {\n spinnerStyle.bottom = Math.abs(windowHeight - containerBottom) + 30;\n }\n\n // Если знаем высоту спиннера и нижний край контейнера поднимается\n // выше отступа на высоту спиннера, то убираем верхнюю позицию лоадера\n\n const spinnerHeight = getDOMRect(this.spinnerNode).height;\n\n if (spinnerHeight && spinnerStyle.bottom >= windowHeight - spinnerHeight) {\n delete spinnerStyle.top;\n }\n\n // ПО ГОРИЗОНТАЛИ\n // Если левый край контейнера правее левого края окна,\n // то сдвигаем и лоадер\n if (containerLeft > 0) {\n spinnerStyle.left = containerLeft;\n }\n\n // Если правый край контейнера левее правого края окна,\n // то сдвигаем и лоадер\n if (containerRight < windowWidth) {\n spinnerStyle.right = windowWidth - containerRight;\n }\n\n this.setState({\n isStickySpinner: true,\n spinnerStyle,\n });\n };\n\n private disableChildrenFocus = () => {\n if (!this.childrenObserver) {\n this.makeObservable();\n }\n const tabbableElements = getTabbableElements(this.childrenContainerNode);\n tabbableElements.forEach((el) => {\n if (!el.hasAttribute('origin-tabindex')) {\n el.setAttribute('origin-tabindex', el.tabIndex.toString());\n }\n el.tabIndex = -1;\n });\n };\n\n private enableChildrenFocus = () => {\n this.makeUnobservable();\n\n this.globalObject.document?.querySelectorAll('[origin-tabindex]').forEach((el) => {\n el.setAttribute('tabindex', el.getAttribute('origin-tabindex') ?? '0');\n el.removeAttribute('origin-tabindex');\n });\n };\n\n private makeObservable = () => {\n const target = this.childrenContainerNode;\n if (!target || !this.globalObject.MutationObserver) {\n return;\n }\n const config = {\n childList: true,\n subtree: true,\n };\n const observer = new this.globalObject.MutationObserver(this.disableChildrenFocus);\n observer.observe(target, config);\n this.childrenObserver = observer;\n };\n\n private makeUnobservable = () => {\n this.childrenObserver?.disconnect();\n this.childrenObserver = null;\n };\n}\n"]}
|
|
@@ -34,6 +34,7 @@ import { IMaskInput } from '@skbkontur/react-imask';
|
|
|
34
34
|
import { forwardRefAndName } from '../../lib/forwardRefAndName.js';
|
|
35
35
|
import { isKeyArrow, isKeyArrowHorizontal, isKeyArrowLeft, isKeyArrowUp, isKeyEnd, isKeyHome, isModShift, isShortcutJumpCaret, isShortcutSelectAll, someKeys, } from '../../lib/events/keyboard/identifiers.js';
|
|
36
36
|
import { MouseDrag } from '../../lib/events/MouseDrag.js';
|
|
37
|
+
import { scrollInputCaretIntoView } from '../../lib/scrollInputCaretIntoView.js';
|
|
37
38
|
export var FixedIMaskInput = forwardRefAndName('FixedIMaskInput', function FixedIMaskInput(props, ref) {
|
|
38
39
|
var inputRef = props.inputRef, restProps = __rest(props, ["inputRef"]);
|
|
39
40
|
var imaskRef = useRef(null);
|
|
@@ -51,6 +52,7 @@ export var FixedIMaskInput = forwardRefAndName('FixedIMaskInput', function Fixed
|
|
|
51
52
|
}
|
|
52
53
|
var _c = getSelection(), start = _c[0], end = _c[1];
|
|
53
54
|
setSelection(start, end, direction);
|
|
55
|
+
scrollCaretIntoView();
|
|
54
56
|
});
|
|
55
57
|
}
|
|
56
58
|
}, []);
|
|
@@ -113,6 +115,13 @@ export var FixedIMaskInput = forwardRefAndName('FixedIMaskInput', function Fixed
|
|
|
113
115
|
var start = _b[0], end = _b[1], direction = _b[2];
|
|
114
116
|
(_a = imaskRef.current) === null || _a === void 0 ? void 0 : _a.element.setSelectionRange(getNormalizedRange(start), getNormalizedRange(end), direction || 'none');
|
|
115
117
|
}
|
|
118
|
+
function scrollCaretIntoView() {
|
|
119
|
+
var _a;
|
|
120
|
+
var element = (_a = imaskRef.current) === null || _a === void 0 ? void 0 : _a.element;
|
|
121
|
+
if (element) {
|
|
122
|
+
scrollInputCaretIntoView(element);
|
|
123
|
+
}
|
|
124
|
+
}
|
|
116
125
|
function jumpCaret(prev, headDirection) {
|
|
117
126
|
var _a, _b;
|
|
118
127
|
var word = /а-яa-z0-9_/.valueOf();
|
|
@@ -202,11 +211,13 @@ export var FixedIMaskInput = forwardRefAndName('FixedIMaskInput', function Fixed
|
|
|
202
211
|
if (isShortcutSelectAll(e)) {
|
|
203
212
|
e.preventDefault();
|
|
204
213
|
setSelection(0, nearest);
|
|
214
|
+
scrollCaretIntoView();
|
|
205
215
|
}
|
|
206
216
|
else if (isKeyArrow(e) || isKeyEnd(e) || isKeyHome(e)) {
|
|
207
217
|
e.preventDefault();
|
|
208
218
|
var _b = calcSelection(e), start = _b[0], end = _b[1], direction = _b[2];
|
|
209
219
|
setSelection(start, end, direction);
|
|
220
|
+
scrollCaretIntoView();
|
|
210
221
|
}
|
|
211
222
|
(_a = props.onKeyDown) === null || _a === void 0 ? void 0 : _a.call(props, e);
|
|
212
223
|
}
|