@consta/uikit 3.17.0 → 3.17.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/Attach/package.json +1 -1
- package/Attachment/package.json +1 -1
- package/Avatar/package.json +1 -1
- package/Badge/package.json +1 -1
- package/BasicSelectDeprecated/package.json +1 -1
- package/Breadcrumbs/package.json +1 -1
- package/BreadcrumbsCanary/package.json +1 -1
- package/Button/package.json +1 -1
- package/CHANGELOG.md +23 -45
- package/Calendar/package.json +1 -1
- package/Card/package.json +1 -1
- package/Checkbox/package.json +1 -1
- package/CheckboxGroup/package.json +1 -1
- package/ChoiceGroup/package.json +1 -1
- package/Collapse/package.json +1 -1
- package/CollapseGroup/package.json +1 -1
- package/Combobox/package.json +1 -1
- package/ComboboxDeprecated/package.json +1 -1
- package/ContextMenu/package.json +1 -1
- package/DatePickerCanary/package.json +1 -1
- package/DateTimeCanary/package.json +1 -1
- package/DragNDropField/package.json +1 -1
- package/EventInterceptor/package.json +1 -1
- package/FieldCaption/package.json +1 -1
- package/FieldLabel/package.json +1 -1
- package/File/package.json +1 -1
- package/FileField/package.json +1 -1
- package/FileIcon/package.json +1 -1
- package/FileIconAvi/package.json +1 -1
- package/FileIconBmp/package.json +1 -1
- package/FileIconCsv/package.json +1 -1
- package/FileIconDoc/package.json +1 -1
- package/FileIconExe/package.json +1 -1
- package/FileIconGif/package.json +1 -1
- package/FileIconJpg/package.json +1 -1
- package/FileIconJson/package.json +1 -1
- package/FileIconLoading/package.json +1 -1
- package/FileIconMov/package.json +1 -1
- package/FileIconMp3/package.json +1 -1
- package/FileIconMp4/package.json +1 -1
- package/FileIconPdf/package.json +1 -1
- package/FileIconPng/package.json +1 -1
- package/FileIconPtt/package.json +1 -1
- package/FileIconRar/package.json +1 -1
- package/FileIconRtf/package.json +1 -1
- package/FileIconTiff/package.json +1 -1
- package/FileIconTxt/package.json +1 -1
- package/FileIconUndefined/package.json +1 -1
- package/FileIconWav/package.json +1 -1
- package/FileIconXls/package.json +1 -1
- package/FileIconZip/package.json +1 -1
- package/Grid/package.json +1 -1
- package/Header/package.json +1 -1
- package/Icon/package.json +1 -1
- package/IconAdd/package.json +1 -1
- package/IconAddToComparison/package.json +1 -1
- package/IconAlert/package.json +1 -1
- package/IconAlignBlocksLeft/package.json +1 -1
- package/IconAlignBlocksRight/package.json +1 -1
- package/IconAlignCenter/package.json +1 -1
- package/IconAlignJustify/package.json +1 -1
- package/IconAlignLeft/package.json +1 -1
- package/IconAlignRight/package.json +1 -1
- package/IconAllDone/package.json +1 -1
- package/IconArrowDown/package.json +1 -1
- package/IconArrowLeft/package.json +1 -1
- package/IconArrowRight/package.json +1 -1
- package/IconArrowUp/package.json +1 -1
- package/IconArtBrush/package.json +1 -1
- package/IconAttach/package.json +1 -1
- package/IconBackward/package.json +1 -1
- package/IconBag/package.json +1 -1
- package/IconBarrier/package.json +1 -1
- package/IconBento/package.json +1 -1
- package/IconBold/package.json +1 -1
- package/IconBook/package.json +1 -1
- package/IconBookmarkFilled/package.json +1 -1
- package/IconBookmarkStroked/package.json +1 -1
- package/IconCalculator/package.json +1 -1
- package/IconCalendar/package.json +1 -1
- package/IconCamera/package.json +1 -1
- package/IconCancel/package.json +1 -1
- package/IconCards/package.json +1 -1
- package/IconChat/package.json +1 -1
- package/IconCheck/package.json +1 -1
- package/IconClose/package.json +1 -1
- package/IconCollapse/package.json +1 -1
- package/IconColorFill/package.json +1 -1
- package/IconColorText/package.json +1 -1
- package/IconColumns/package.json +1 -1
- package/IconComment/package.json +1 -1
- package/IconConnection/package.json +1 -1
- package/IconCopy/package.json +1 -1
- package/IconCrown/package.json +1 -1
- package/IconCursorMouse/package.json +1 -1
- package/IconDataNull/package.json +1 -1
- package/IconDiamond/package.json +1 -1
- package/IconDinosaur/package.json +1 -1
- package/IconDisconnection/package.json +1 -1
- package/IconDocAdd/package.json +1 -1
- package/IconDocBlank/package.json +1 -1
- package/IconDocDelete/package.json +1 -1
- package/IconDocExport/package.json +1 -1
- package/IconDocFilled/package.json +1 -1
- package/IconDown/package.json +1 -1
- package/IconDownload/package.json +1 -1
- package/IconDrag/package.json +1 -1
- package/IconDraggable/package.json +1 -1
- package/IconDrillingRig/package.json +1 -1
- package/IconDrop/package.json +1 -1
- package/IconEdit/package.json +1 -1
- package/IconExit/package.json +1 -1
- package/IconExpand/package.json +1 -1
- package/IconEye/package.json +1 -1
- package/IconEyeClose/package.json +1 -1
- package/IconFavorite/package.json +1 -1
- package/IconFilter/package.json +1 -1
- package/IconFitToDefault/package.json +1 -1
- package/IconFlagFilled/package.json +1 -1
- package/IconFlagStroked/package.json +1 -1
- package/IconFolders/package.json +1 -1
- package/IconForward/package.json +1 -1
- package/IconFunnel/package.json +1 -1
- package/IconGas/package.json +1 -1
- package/IconGeo/package.json +1 -1
- package/IconGrouping/package.json +1 -1
- package/IconHamburger/package.json +1 -1
- package/IconHand/package.json +1 -1
- package/IconHealth/package.json +1 -1
- package/IconHome/package.json +1 -1
- package/IconInComparison/package.json +1 -1
- package/IconInfo/package.json +1 -1
- package/IconIntroduction/package.json +1 -1
- package/IconIpad/package.json +1 -1
- package/IconItalic/package.json +1 -1
- package/IconKebab/package.json +1 -1
- package/IconLaptop/package.json +1 -1
- package/IconLayers/package.json +1 -1
- package/IconLeaf/package.json +1 -1
- package/IconLightningBolt/package.json +1 -1
- package/IconLineAndBarChart/package.json +1 -1
- package/IconLink/package.json +1 -1
- package/IconList/package.json +1 -1
- package/IconListNumbered/package.json +1 -1
- package/IconLock/package.json +1 -1
- package/IconLogicalElement/package.json +1 -1
- package/IconMBU/package.json +1 -1
- package/IconMGRP/package.json +1 -1
- package/IconMLSP/package.json +1 -1
- package/IconMMP/package.json +1 -1
- package/IconMail/package.json +1 -1
- package/IconMap/package.json +1 -1
- package/IconMaxHeight/package.json +1 -1
- package/IconMaxWidth/package.json +1 -1
- package/IconMeatball/package.json +1 -1
- package/IconMic/package.json +1 -1
- package/IconMolecules/package.json +1 -1
- package/IconMoon/package.json +1 -1
- package/IconNodeEnd/package.json +1 -1
- package/IconNodeStart/package.json +1 -1
- package/IconNodeStep/package.json +1 -1
- package/IconNodes/package.json +1 -1
- package/IconOpenInNew/package.json +1 -1
- package/IconOperators/package.json +1 -1
- package/IconPanelBottom/package.json +1 -1
- package/IconPanelLeft/package.json +1 -1
- package/IconPanelRight/package.json +1 -1
- package/IconPanelTop/package.json +1 -1
- package/IconPaste/package.json +1 -1
- package/IconPause/package.json +1 -1
- package/IconPhone/package.json +1 -1
- package/IconPhoto/package.json +1 -1
- package/IconPicture/package.json +1 -1
- package/IconPlay/package.json +1 -1
- package/IconPressure/package.json +1 -1
- package/IconPriceLabel/package.json +1 -1
- package/IconProcessing/package.json +1 -1
- package/IconQuestion/package.json +1 -1
- package/IconQuote/package.json +1 -1
- package/IconRUO/package.json +1 -1
- package/IconRUS/package.json +1 -1
- package/IconRecord/package.json +1 -1
- package/IconRemove/package.json +1 -1
- package/IconRemoveFromComparison/package.json +1 -1
- package/IconReply/package.json +1 -1
- package/IconResize/package.json +1 -1
- package/IconRestart/package.json +1 -1
- package/IconRevert/package.json +1 -1
- package/IconRing/package.json +1 -1
- package/IconRouble/package.json +1 -1
- package/IconRuler/package.json +1 -1
- package/IconSave/package.json +1 -1
- package/IconScreen/package.json +1 -1
- package/IconSearch/package.json +1 -1
- package/IconSelect/package.json +1 -1
- package/IconSelectOpen/package.json +1 -1
- package/IconSendMessage/package.json +1 -1
- package/IconSettings/package.json +1 -1
- package/IconShape/package.json +1 -1
- package/IconShuffle/package.json +1 -1
- package/IconSmile/package.json +1 -1
- package/IconSortDown/package.json +1 -1
- package/IconSortDownCenter/package.json +1 -1
- package/IconSortUp/package.json +1 -1
- package/IconSortUpCenter/package.json +1 -1
- package/IconStop/package.json +1 -1
- package/IconStorage/package.json +1 -1
- package/IconStrikethrough/package.json +1 -1
- package/IconSun/package.json +1 -1
- package/IconTable/package.json +1 -1
- package/IconTable2/package.json +1 -1
- package/IconTarget/package.json +1 -1
- package/IconTeam/package.json +1 -1
- package/IconTechResponse/package.json +1 -1
- package/IconTest/package.json +1 -1
- package/IconThumbUp/package.json +1 -1
- package/IconTie/package.json +1 -1
- package/IconTop/package.json +1 -1
- package/IconTrash/package.json +1 -1
- package/IconType/package.json +1 -1
- package/IconUnderline/package.json +1 -1
- package/IconUnlock/package.json +1 -1
- package/IconUnsort/package.json +1 -1
- package/IconUnsortCenter/package.json +1 -1
- package/IconUpload/package.json +1 -1
- package/IconUser/package.json +1 -1
- package/IconVZD/package.json +1 -1
- package/IconVideo/package.json +1 -1
- package/IconWarning/package.json +1 -1
- package/IconWatch/package.json +1 -1
- package/IconWideScreen/package.json +1 -1
- package/IconWorld/package.json +1 -1
- package/IconWrench/package.json +1 -1
- package/Informer/package.json +1 -1
- package/LayoutCanary/package.json +1 -1
- package/Loader/package.json +1 -1
- package/MixCard/package.json +1 -1
- package/MixFocus/package.json +1 -1
- package/MixPopoverAnimate/package.json +1 -1
- package/MixSpace/package.json +1 -1
- package/MixVisuallyHidden/package.json +1 -1
- package/Modal/package.json +1 -1
- package/MultiComboboxDeprecated/package.json +1 -1
- package/Pagination/package.json +1 -1
- package/Popover/package.json +1 -1
- package/PortalWithTheme/package.json +1 -1
- package/ProgressSpin/package.json +1 -1
- package/ProgressStepBarCanary/package.json +1 -1
- package/Radio/package.json +1 -1
- package/RadioGroup/package.json +1 -1
- package/Responses/package.json +1 -1
- package/Responses403/package.json +1 -1
- package/Responses404/package.json +1 -1
- package/Responses500/package.json +1 -1
- package/Responses503/package.json +1 -1
- package/ResponsesConnectionError/package.json +1 -1
- package/ResponsesDeleted/package.json +1 -1
- package/ResponsesEmptyBox/package.json +1 -1
- package/ResponsesEmptyPockets/package.json +1 -1
- package/ResponsesExit/package.json +1 -1
- package/ResponsesImage/package.json +1 -1
- package/ResponsesImage403/package.json +1 -1
- package/ResponsesImage404/package.json +1 -1
- package/ResponsesImage500/package.json +1 -1
- package/ResponsesImage503/package.json +1 -1
- package/ResponsesImageConnectionError/package.json +1 -1
- package/ResponsesImageDeleted/package.json +1 -1
- package/ResponsesImageEmptyBox/package.json +1 -1
- package/ResponsesImageEmptyPockets/package.json +1 -1
- package/ResponsesImageNothingFound/package.json +1 -1
- package/ResponsesImageSuccess/package.json +1 -1
- package/ResponsesNothingFound/package.json +1 -1
- package/ResponsesSuccess/package.json +1 -1
- package/Select/package.json +1 -1
- package/Sidebar/package.json +1 -1
- package/Skeleton/package.json +1 -1
- package/SliderCanary/package.json +1 -1
- package/SnackBar/package.json +1 -1
- package/Steps/package.json +1 -1
- package/Switch/package.json +1 -1
- package/SwitchGroup/package.json +1 -1
- package/Table/package.json +1 -1
- package/Tabs/package.json +1 -1
- package/Tag/package.json +1 -1
- package/TagBase/package.json +1 -1
- package/Text/package.json +1 -1
- package/TextField/package.json +1 -1
- package/Theme/package.json +1 -1
- package/ThemeToggler/package.json +1 -1
- package/Timer/package.json +1 -1
- package/Tooltip/package.json +1 -1
- package/User/package.json +1 -1
- package/UserSelect/package.json +1 -1
- package/UserSelectDeprecated/package.json +1 -1
- package/__internal__/cjs-src/components/ContextMenu/helpers.d.ts +3 -3
- package/__internal__/cjs-src/components/Popover/Popover.css +8 -0
- package/__internal__/cjs-src/components/Popover/Popover.d.ts +6 -3
- package/__internal__/cjs-src/components/Popover/Popover.js +31 -9
- package/__internal__/cjs-src/components/Popover/helpers.d.ts +2 -1
- package/__internal__/cjs-src/components/Popover/helpers.js +7 -3
- package/__internal__/cjs-src/components/SelectComponents/SelectDropdown/SelectDropdown.css +0 -1
- package/__internal__/cjs-src/components/Sidebar/Sidebar.css +5 -0
- package/__internal__/cjs-src/components/Sidebar/Sidebar.js +1 -1
- package/__internal__/cjs-src/components/Table/Table.css +1 -0
- package/__internal__/cjs-src/components/Table/Table.d.ts +1 -1
- package/__internal__/cjs-src/components/Table/Table.js +17 -5
- package/__internal__/cjs-src/components/Table/helpers.d.ts +1 -0
- package/__internal__/cjs-src/components/Table/helpers.js +12 -4
- package/__internal__/cjs-src/components/Tooltip/Tooltip.css +0 -1
- package/__internal__/src/components/ContextMenu/helpers.d.ts +3 -3
- package/__internal__/src/components/Popover/Popover.css +8 -0
- package/__internal__/src/components/Popover/Popover.d.ts +6 -3
- package/__internal__/src/components/Popover/Popover.js +30 -8
- package/__internal__/src/components/Popover/helpers.d.ts +2 -1
- package/__internal__/src/components/Popover/helpers.js +6 -2
- package/__internal__/src/components/SelectComponents/SelectDropdown/SelectDropdown.css +0 -1
- package/__internal__/src/components/Sidebar/Sidebar.css +5 -0
- package/__internal__/src/components/Sidebar/Sidebar.js +1 -1
- package/__internal__/src/components/Table/Table.css +1 -0
- package/__internal__/src/components/Table/Table.d.ts +1 -1
- package/__internal__/src/components/Table/Table.js +18 -6
- package/__internal__/src/components/Table/helpers.d.ts +1 -0
- package/__internal__/src/components/Table/helpers.js +10 -3
- package/__internal__/src/components/Tooltip/Tooltip.css +0 -1
- package/createIcon/package.json +1 -1
- package/createResponsesImage/package.json +1 -1
- package/package.json +1 -1
- package/useBreakpoints/package.json +1 -1
- package/useChoiceGroup/package.json +1 -1
- package/useChoiceGroupIndexed/package.json +1 -1
- package/useClickOutside/package.json +1 -1
- package/useComponentSize/package.json +1 -1
- package/useDebounce/package.json +1 -1
- package/useFlag/package.json +1 -1
- package/useForkRef/package.json +1 -1
- package/useGlobalKeys/package.json +1 -1
- package/useHideElementsInLine/package.json +1 -1
- package/useKeys/package.json +1 -1
- package/useMutableRef/package.json +1 -1
- package/useOverflow/package.json +1 -1
- package/usePrevious/package.json +1 -1
- package/useRefs/package.json +1 -1
- package/useResizeObserved/package.json +1 -1
- package/useScrollElements/package.json +1 -1
- package/useScrollPosition/package.json +1 -1
- package/useSelect/package.json +1 -1
- package/useSortSteps/package.json +1 -1
- package/useThemeVars/package.json +1 -1
- package/useTimer/package.json +1 -1
- package/withTooltip/package.json +1 -1
|
@@ -103,6 +103,12 @@ var InternalTable = function (props, ref) {
|
|
|
103
103
|
var updateColumnWidth = function (idx, newWidth) {
|
|
104
104
|
setResizedColumnWidths(array_1.updateAt(resizedColumnWidths, idx, newWidth));
|
|
105
105
|
};
|
|
106
|
+
var overallColumnsWidth = react_1.useMemo(function () {
|
|
107
|
+
var columnsElements = Object.values(columnsRefs.current).filter(type_guards_1.isNotNil);
|
|
108
|
+
var columnsElementsWidths = columnsElements.map(function (el) { return el.getBoundingClientRect().width; });
|
|
109
|
+
var resultArr = helpers_1.getMergedArray(columnsElementsWidths, resizedColumnWidths);
|
|
110
|
+
return resultArr.reduce(function (a, b) { return (a !== null && a !== void 0 ? a : 0) + (b !== null && b !== void 0 ? b : 0); });
|
|
111
|
+
}, [resizedColumnWidths, isResizable]);
|
|
106
112
|
react_1["default"].useLayoutEffect(function () {
|
|
107
113
|
var columnsElements = Object.values(columnsRefs.current).filter(type_guards_1.isNotNil);
|
|
108
114
|
if (columnsElements.length === 0)
|
|
@@ -111,15 +117,21 @@ var InternalTable = function (props, ref) {
|
|
|
111
117
|
setInitialColumnWidths(columnsElementsWidths);
|
|
112
118
|
// Проверяем, что таблица отрисовалась корректно, и устанавливаем значения ширин колонок после 1го и последующих рендера
|
|
113
119
|
if (columnsElements[0].getBoundingClientRect().left !==
|
|
114
|
-
columnsElements[columnsElements.length - 1].getBoundingClientRect().left
|
|
115
|
-
|
|
116
|
-
|
|
120
|
+
columnsElements[columnsElements.length - 1].getBoundingClientRect().left) {
|
|
121
|
+
var resultArr = helpers_1.getMergedArray(columnsElementsWidths, resizedColumnWidths);
|
|
122
|
+
// Выставляю в undefined так как если вычеслять значение для последней колонки так,
|
|
123
|
+
// чтобы заполнялось все свободное пространство, при изменении ширины таблицы в меньшую сторону
|
|
124
|
+
// ширина последней колонки изменяться не будет, а так она будет css'ом проставляться в auto
|
|
125
|
+
if ((overallColumnsWidth !== null && overallColumnsWidth !== void 0 ? overallColumnsWidth : tableWidth) < tableWidth) {
|
|
126
|
+
resultArr[resultArr.length - 1] = undefined;
|
|
127
|
+
}
|
|
128
|
+
return setResizedColumnWidths(resultArr);
|
|
117
129
|
}
|
|
118
130
|
// условие изменения ширины колонок при изменении ширины экрана (контейнера таблицы)
|
|
119
131
|
if (tableWidth > 0 && !isResizable) {
|
|
120
132
|
return setResizedColumnWidths(getColumnsWidth());
|
|
121
133
|
}
|
|
122
|
-
}, [tableWidth]);
|
|
134
|
+
}, [tableWidth, overallColumnsWidth]);
|
|
123
135
|
var isSortedByColumn = function (column) {
|
|
124
136
|
return getColumnSortByField(column) === (sorting === null || sorting === void 0 ? void 0 : sorting.by);
|
|
125
137
|
};
|
|
@@ -240,7 +252,7 @@ var InternalTable = function (props, ref) {
|
|
|
240
252
|
var flatRowsData = helpers_1.transformRows(filteredData, expandedRowIds, isExpandedRowsByDefault);
|
|
241
253
|
var rowsData = getSlicedRows(flatRowsData);
|
|
242
254
|
var tableStyle = {
|
|
243
|
-
'
|
|
255
|
+
'--table-grid-template-columns': helpers_1.getColumnsSize(resizedColumnWidths),
|
|
244
256
|
'--table-width': tableWidth + "px"
|
|
245
257
|
};
|
|
246
258
|
var hasMergedCells = columnsWithMetaData(lowHeaders).some(function (header) { return header.mergeCells; });
|
|
@@ -113,3 +113,4 @@ export declare const useLazyLoadData: (maxVisibleRows: number, scrollableEl: HTM
|
|
|
113
113
|
setBoundaryRef: (columnIdx: number, rowIdx: number) => React.RefObject<HTMLDivElement> | undefined;
|
|
114
114
|
};
|
|
115
115
|
export declare const transformRows: <T extends TableRow>(rows: T[], expandedRowIds: string[], isTableExpanded?: boolean | undefined) => TableTreeRow<T>[];
|
|
116
|
+
export declare function getMergedArray<TYPE>(mainArr: TYPE[], mergeArr: TYPE[]): TYPE[];
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
exports.__esModule = true;
|
|
3
|
-
exports.transformRows = exports.useLazyLoadData = exports.useHeaderData = exports.transformColumns = exports.getMaxLevel = exports.getNewSorting = exports.createSortingState = exports.getColumnLeftOffset = exports.getColumnsSize = exports.Order = void 0;
|
|
3
|
+
exports.getMergedArray = exports.transformRows = exports.useLazyLoadData = exports.useHeaderData = exports.transformColumns = exports.getMaxLevel = exports.getNewSorting = exports.createSortingState = exports.getColumnLeftOffset = exports.getColumnsSize = exports.Order = void 0;
|
|
4
4
|
var tslib_1 = require("tslib");
|
|
5
5
|
var react_1 = tslib_1.__importDefault(require("react"));
|
|
6
6
|
var type_guards_1 = require("../../utils/type-guards");
|
|
@@ -11,9 +11,7 @@ exports.Order = {
|
|
|
11
11
|
desc: 'desc'
|
|
12
12
|
};
|
|
13
13
|
exports.getColumnsSize = function (sizes) {
|
|
14
|
-
return sizes
|
|
15
|
-
.map(function (s) { return (type_guards_1.isNumber(s) ? s + "px" : "minmax(min-content, " + 100 / sizes.length + "%)"); })
|
|
16
|
-
.join(' ');
|
|
14
|
+
return sizes.map(function (s) { return (type_guards_1.isNumber(s) ? s + "px" : "auto"); }).join(' ');
|
|
17
15
|
};
|
|
18
16
|
exports.getColumnLeftOffset = function (_a) {
|
|
19
17
|
var columnIndex = _a.columnIndex, resizedColumnWidths = _a.resizedColumnWidths, initialColumnWidths = _a.initialColumnWidths;
|
|
@@ -260,3 +258,13 @@ exports.transformRows = function (rows, expandedRowIds, isTableExpanded) {
|
|
|
260
258
|
}
|
|
261
259
|
return rowsArr;
|
|
262
260
|
};
|
|
261
|
+
function getMergedArray(mainArr, mergeArr) {
|
|
262
|
+
var _a;
|
|
263
|
+
var length = Math.max(mainArr.length, mergeArr.length);
|
|
264
|
+
var resultArr = [];
|
|
265
|
+
for (var i = 0; i < length; i++) {
|
|
266
|
+
resultArr.push((_a = mergeArr[i]) !== null && _a !== void 0 ? _a : mainArr[i]);
|
|
267
|
+
}
|
|
268
|
+
return resultArr;
|
|
269
|
+
}
|
|
270
|
+
exports.getMergedArray = getMergedArray;
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
import { ClickOutsideHandler } from '../../hooks/useClickOutside/useClickOutside';
|
|
3
3
|
import { PropsWithAsAttributes } from '../../utils/types/PropsWithAsAttributes';
|
|
4
4
|
import { PropsWithHTMLAttributesAndRef } from '../../utils/types/PropsWithHTMLAttributes';
|
|
5
|
-
import { Direction, Position } from '../Popover/Popover';
|
|
5
|
+
import { Direction, PopoverPropOffset, Position } from '../Popover/Popover';
|
|
6
6
|
export declare const contextMenuSizes: readonly ["m", "s", "l"];
|
|
7
7
|
export declare type ContextMenuPropSize = typeof contextMenuSizes[number];
|
|
8
8
|
export declare const contextMenuDefaultSize: ContextMenuPropSize;
|
|
@@ -48,7 +48,7 @@ export declare type ContextMenuProps<ITEM> = PropsWithHTMLAttributesAndRef<{
|
|
|
48
48
|
subMenuDirection?: ContextMenuPropSubMenuDirection;
|
|
49
49
|
getKey?: ContextMenuPropGetKey<ITEM>;
|
|
50
50
|
getDisabled?: ContextMenuPropGetDisable<ITEM>;
|
|
51
|
-
offset?:
|
|
51
|
+
offset?: PopoverPropOffset;
|
|
52
52
|
onItemClick?: (props: {
|
|
53
53
|
e: React.MouseEvent;
|
|
54
54
|
item: ITEM;
|
|
@@ -85,7 +85,7 @@ export declare type Level<ITEM> = {
|
|
|
85
85
|
activeItem?: string;
|
|
86
86
|
direction?: Direction;
|
|
87
87
|
possibleDirections?: readonly Direction[];
|
|
88
|
-
offset?:
|
|
88
|
+
offset?: PopoverPropOffset;
|
|
89
89
|
} & PositioningProps;
|
|
90
90
|
export declare type ContextMenuItemComponent = <AS extends keyof JSX.IntrinsicElements = 'div'>(props: ContextMenuItemProps<AS>, ref: React.Ref<HTMLElement>) => React.ReactElement | null;
|
|
91
91
|
export declare type ContextMenuComponent = <ITEM>(props: ContextMenuProps<ITEM>) => React.ReactElement | null;
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import './Popover.css';
|
|
1
2
|
import React from 'react';
|
|
2
3
|
import { ClickOutsideHandler } from '../../hooks/useClickOutside/useClickOutside';
|
|
3
4
|
import { PropsWithJsxAttributes } from '../../utils/types/PropsWithJsxAttributes';
|
|
@@ -9,6 +10,8 @@ export { usePopoverReposition };
|
|
|
9
10
|
*/
|
|
10
11
|
export declare const directionsStartCenter: readonly ["downCenter", "upCenter", "downRight", "downLeft", "upRight", "upLeft", "leftUp", "leftCenter", "leftDown", "rightUp", "rightCenter", "rightDown"];
|
|
11
12
|
export declare const directionsStartEdge: readonly ["downStartLeft", "upStartLeft", "downStartRight", "upStartRight", "leftStartUp", "leftStartDown", "rightStartUp", "rightStartDown"];
|
|
13
|
+
export declare const popoverPropOffset: readonly ["3xs", "2xs", "xs", "s", "m", "l", "xl", "2xl", "3xl", "4xl", "5xl", "6xl"];
|
|
14
|
+
export declare type PopoverPropOffset = typeof popoverPropOffset[number] | number;
|
|
12
15
|
export declare const directions: ("downCenter" | "upCenter" | "downRight" | "downLeft" | "upRight" | "upLeft" | "leftUp" | "leftCenter" | "leftDown" | "rightUp" | "rightCenter" | "rightDown" | "downStartLeft" | "upStartLeft" | "downStartRight" | "upStartRight" | "leftStartUp" | "leftStartDown" | "rightStartUp" | "rightStartDown")[];
|
|
13
16
|
export declare type Direction = typeof directions[number];
|
|
14
17
|
export declare type Position = {
|
|
@@ -28,7 +31,7 @@ declare type ChildrenRenderProp = (direction: Direction) => React.ReactNode;
|
|
|
28
31
|
export declare type Props = PropsWithJsxAttributes<{
|
|
29
32
|
direction?: Direction;
|
|
30
33
|
spareDirection?: Direction;
|
|
31
|
-
offset?:
|
|
34
|
+
offset?: PopoverPropOffset;
|
|
32
35
|
arrowOffset?: number;
|
|
33
36
|
possibleDirections?: readonly Direction[];
|
|
34
37
|
isInteractive?: boolean;
|
|
@@ -39,7 +42,7 @@ export declare type Props = PropsWithJsxAttributes<{
|
|
|
39
42
|
export declare const Popover: React.ForwardRefExoticComponent<Pick<Pick<({
|
|
40
43
|
direction?: "downCenter" | "upCenter" | "downRight" | "downLeft" | "upRight" | "upLeft" | "leftUp" | "leftCenter" | "leftDown" | "rightUp" | "rightCenter" | "rightDown" | "downStartLeft" | "upStartLeft" | "downStartRight" | "upStartRight" | "leftStartUp" | "leftStartDown" | "rightStartUp" | "rightStartDown" | undefined;
|
|
41
44
|
spareDirection?: "downCenter" | "upCenter" | "downRight" | "downLeft" | "upRight" | "upLeft" | "leftUp" | "leftCenter" | "leftDown" | "rightUp" | "rightCenter" | "rightDown" | "downStartLeft" | "upStartLeft" | "downStartRight" | "upStartRight" | "leftStartUp" | "leftStartDown" | "rightStartUp" | "rightStartDown" | undefined;
|
|
42
|
-
offset?: number | undefined;
|
|
45
|
+
offset?: number | "xs" | "s" | "m" | "l" | "2xs" | "xl" | "2xl" | "3xl" | "4xl" | "5xl" | "6xl" | "3xs" | undefined;
|
|
43
46
|
arrowOffset?: number | undefined;
|
|
44
47
|
possibleDirections?: readonly ("downCenter" | "upCenter" | "downRight" | "downLeft" | "upRight" | "upLeft" | "leftUp" | "leftCenter" | "leftDown" | "rightUp" | "rightCenter" | "rightDown" | "downStartLeft" | "upStartLeft" | "downStartRight" | "upStartRight" | "leftStartUp" | "leftStartDown" | "rightStartUp" | "rightStartDown")[] | undefined;
|
|
45
48
|
isInteractive?: boolean | undefined;
|
|
@@ -53,7 +56,7 @@ export declare const Popover: React.ForwardRefExoticComponent<Pick<Pick<({
|
|
|
53
56
|
} & Pick<React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "css" | "defaultChecked" | "defaultValue" | "suppressContentEditableWarning" | "suppressHydrationWarning" | "accessKey" | "className" | "contentEditable" | "contextMenu" | "dir" | "draggable" | "hidden" | "id" | "lang" | "placeholder" | "slot" | "spellCheck" | "style" | "tabIndex" | "title" | "translate" | "radioGroup" | "role" | "about" | "datatype" | "inlist" | "prefix" | "property" | "resource" | "typeof" | "vocab" | "autoCapitalize" | "autoCorrect" | "autoSave" | "color" | "itemProp" | "itemScope" | "itemType" | "itemID" | "itemRef" | "results" | "security" | "unselectable" | "inputMode" | "is" | "aria-activedescendant" | "aria-atomic" | "aria-autocomplete" | "aria-busy" | "aria-checked" | "aria-colcount" | "aria-colindex" | "aria-colspan" | "aria-controls" | "aria-current" | "aria-describedby" | "aria-details" | "aria-disabled" | "aria-dropeffect" | "aria-errormessage" | "aria-expanded" | "aria-flowto" | "aria-grabbed" | "aria-haspopup" | "aria-hidden" | "aria-invalid" | "aria-keyshortcuts" | "aria-label" | "aria-labelledby" | "aria-level" | "aria-live" | "aria-modal" | "aria-multiline" | "aria-multiselectable" | "aria-orientation" | "aria-owns" | "aria-placeholder" | "aria-posinset" | "aria-pressed" | "aria-readonly" | "aria-relevant" | "aria-required" | "aria-roledescription" | "aria-rowcount" | "aria-rowindex" | "aria-rowspan" | "aria-selected" | "aria-setsize" | "aria-sort" | "aria-valuemax" | "aria-valuemin" | "aria-valuenow" | "aria-valuetext" | "dangerouslySetInnerHTML" | "onCopy" | "onCopyCapture" | "onCut" | "onCutCapture" | "onPaste" | "onPasteCapture" | "onCompositionEnd" | "onCompositionEndCapture" | "onCompositionStart" | "onCompositionStartCapture" | "onCompositionUpdate" | "onCompositionUpdateCapture" | "onFocus" | "onFocusCapture" | "onBlur" | "onBlurCapture" | "onChange" | "onChangeCapture" | "onBeforeInput" | "onBeforeInputCapture" | "onInput" | "onInputCapture" | "onReset" | "onResetCapture" | "onSubmit" | "onSubmitCapture" | "onInvalid" | "onInvalidCapture" | "onLoad" | "onLoadCapture" | "onError" | "onErrorCapture" | "onKeyDown" | "onKeyDownCapture" | "onKeyPress" | "onKeyPressCapture" | "onKeyUp" | "onKeyUpCapture" | "onAbort" | "onAbortCapture" | "onCanPlay" | "onCanPlayCapture" | "onCanPlayThrough" | "onCanPlayThroughCapture" | "onDurationChange" | "onDurationChangeCapture" | "onEmptied" | "onEmptiedCapture" | "onEncrypted" | "onEncryptedCapture" | "onEnded" | "onEndedCapture" | "onLoadedData" | "onLoadedDataCapture" | "onLoadedMetadata" | "onLoadedMetadataCapture" | "onLoadStart" | "onLoadStartCapture" | "onPause" | "onPauseCapture" | "onPlay" | "onPlayCapture" | "onPlaying" | "onPlayingCapture" | "onProgress" | "onProgressCapture" | "onRateChange" | "onRateChangeCapture" | "onSeeked" | "onSeekedCapture" | "onSeeking" | "onSeekingCapture" | "onStalled" | "onStalledCapture" | "onSuspend" | "onSuspendCapture" | "onTimeUpdate" | "onTimeUpdateCapture" | "onVolumeChange" | "onVolumeChangeCapture" | "onWaiting" | "onWaitingCapture" | "onAuxClick" | "onAuxClickCapture" | "onClick" | "onClickCapture" | "onContextMenu" | "onContextMenuCapture" | "onDoubleClick" | "onDoubleClickCapture" | "onDrag" | "onDragCapture" | "onDragEnd" | "onDragEndCapture" | "onDragEnter" | "onDragEnterCapture" | "onDragExit" | "onDragExitCapture" | "onDragLeave" | "onDragLeaveCapture" | "onDragOver" | "onDragOverCapture" | "onDragStart" | "onDragStartCapture" | "onDrop" | "onDropCapture" | "onMouseDown" | "onMouseDownCapture" | "onMouseEnter" | "onMouseLeave" | "onMouseMove" | "onMouseMoveCapture" | "onMouseOut" | "onMouseOutCapture" | "onMouseOver" | "onMouseOverCapture" | "onMouseUp" | "onMouseUpCapture" | "onSelect" | "onSelectCapture" | "onTouchCancel" | "onTouchCancelCapture" | "onTouchEnd" | "onTouchEndCapture" | "onTouchMove" | "onTouchMoveCapture" | "onTouchStart" | "onTouchStartCapture" | "onPointerDown" | "onPointerDownCapture" | "onPointerMove" | "onPointerMoveCapture" | "onPointerUp" | "onPointerUpCapture" | "onPointerCancel" | "onPointerCancelCapture" | "onPointerEnter" | "onPointerEnterCapture" | "onPointerLeave" | "onPointerLeaveCapture" | "onPointerOver" | "onPointerOverCapture" | "onPointerOut" | "onPointerOutCapture" | "onGotPointerCapture" | "onGotPointerCaptureCapture" | "onLostPointerCapture" | "onLostPointerCaptureCapture" | "onScroll" | "onScrollCapture" | "onWheel" | "onWheelCapture" | "onAnimationStart" | "onAnimationStartCapture" | "onAnimationEnd" | "onAnimationEndCapture" | "onAnimationIteration" | "onAnimationIterationCapture" | "onTransitionEnd" | "onTransitionEndCapture" | "ref" | "key">) | ({
|
|
54
57
|
direction?: "downCenter" | "upCenter" | "downRight" | "downLeft" | "upRight" | "upLeft" | "leftUp" | "leftCenter" | "leftDown" | "rightUp" | "rightCenter" | "rightDown" | "downStartLeft" | "upStartLeft" | "downStartRight" | "upStartRight" | "leftStartUp" | "leftStartDown" | "rightStartUp" | "rightStartDown" | undefined;
|
|
55
58
|
spareDirection?: "downCenter" | "upCenter" | "downRight" | "downLeft" | "upRight" | "upLeft" | "leftUp" | "leftCenter" | "leftDown" | "rightUp" | "rightCenter" | "rightDown" | "downStartLeft" | "upStartLeft" | "downStartRight" | "upStartRight" | "leftStartUp" | "leftStartDown" | "rightStartUp" | "rightStartDown" | undefined;
|
|
56
|
-
offset?: number | undefined;
|
|
59
|
+
offset?: number | "xs" | "s" | "m" | "l" | "2xs" | "xl" | "2xl" | "3xl" | "4xl" | "5xl" | "6xl" | "3xs" | undefined;
|
|
57
60
|
arrowOffset?: number | undefined;
|
|
58
61
|
possibleDirections?: readonly ("downCenter" | "upCenter" | "downRight" | "downLeft" | "upRight" | "upLeft" | "leftUp" | "leftCenter" | "leftDown" | "rightUp" | "rightCenter" | "rightDown" | "downStartLeft" | "upStartLeft" | "downStartRight" | "upStartRight" | "leftStartUp" | "leftStartDown" | "rightStartUp" | "rightStartDown")[] | undefined;
|
|
59
62
|
isInteractive?: boolean | undefined;
|
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
import { __assign, __read, __rest, __spread } from "tslib";
|
|
2
|
+
import './Popover.css';
|
|
2
3
|
import React, { useEffect } from 'react';
|
|
3
4
|
import { useClickOutside } from '../../hooks/useClickOutside/useClickOutside';
|
|
4
5
|
import { useComponentSize } from '../../hooks/useComponentSize/useComponentSize';
|
|
5
6
|
import { useForkRef } from '../../hooks/useForkRef/useForkRef';
|
|
7
|
+
import { useThemeVars } from '../../hooks/useThemeVars/useThemeVars';
|
|
8
|
+
import { cn } from '../../utils/bem';
|
|
6
9
|
import { PortalWithTheme, usePortalContext } from '../PortalWithTheme/PortalWithTheme';
|
|
7
10
|
import { useTheme } from '../Theme/Theme';
|
|
8
11
|
import { getComputedPositionAndDirection } from './helpers';
|
|
@@ -36,6 +39,20 @@ export var directionsStartEdge = [
|
|
|
36
39
|
'rightStartUp',
|
|
37
40
|
'rightStartDown',
|
|
38
41
|
];
|
|
42
|
+
export var popoverPropOffset = [
|
|
43
|
+
'3xs',
|
|
44
|
+
'2xs',
|
|
45
|
+
'xs',
|
|
46
|
+
's',
|
|
47
|
+
'm',
|
|
48
|
+
'l',
|
|
49
|
+
'xl',
|
|
50
|
+
'2xl',
|
|
51
|
+
'3xl',
|
|
52
|
+
'4xl',
|
|
53
|
+
'5xl',
|
|
54
|
+
'6xl',
|
|
55
|
+
];
|
|
39
56
|
export var directions = __spread(directionsStartCenter, directionsStartEdge);
|
|
40
57
|
var isRenderProp = function (children) { return typeof children === 'function'; };
|
|
41
58
|
/**
|
|
@@ -53,20 +70,23 @@ var ContextConsumer = function (_a) {
|
|
|
53
70
|
});
|
|
54
71
|
return React.createElement(React.Fragment, null, children);
|
|
55
72
|
};
|
|
73
|
+
var cnPopover = cn('Popover');
|
|
56
74
|
export var Popover = React.forwardRef(function (props, componentRef) {
|
|
57
|
-
var
|
|
75
|
+
var _a;
|
|
76
|
+
var children = props.children, _b = props.direction, passedDirection = _b === void 0 ? 'upCenter' : _b, _c = props.offset, offset = _c === void 0 ? 0 : _c, arrowOffset = props.arrowOffset, _d = props.possibleDirections, possibleDirections = _d === void 0 ? directions : _d, _e = props.isInteractive, isInteractive = _e === void 0 ? true : _e, onClickOutside = props.onClickOutside, _f = props.spareDirection, spareDirection = _f === void 0 ? 'downStartLeft' : _f, style = props.style, className = props.className, passedPosition = props.position, anchorRef = props.anchorRef, equalAnchorWidth = props.equalAnchorWidth, onSetDirection = props.onSetDirection, otherProps = __rest(props, ["children", "direction", "offset", "arrowOffset", "possibleDirections", "isInteractive", "onClickOutside", "spareDirection", "style", "className", "position", "anchorRef", "equalAnchorWidth", "onSetDirection"]);
|
|
58
77
|
var ref = React.useRef(null);
|
|
59
78
|
var theme = useTheme().theme;
|
|
60
|
-
var
|
|
61
|
-
var
|
|
79
|
+
var _g = __read(React.useState(), 2), anchorClientRect = _g[0], setAnchorClientRect = _g[1];
|
|
80
|
+
var _h = useComponentSize(ref), width = _h.width, height = _h.height;
|
|
62
81
|
var anchorSize = useComponentSize(anchorRef || { current: null });
|
|
63
82
|
var previousDirectionRef = React.useRef(null);
|
|
64
83
|
var previousDirection = previousDirectionRef.current;
|
|
65
|
-
var
|
|
84
|
+
var _j = __read(React.useState([]), 2), bannedDirections = _j[0], setBannedDirections = _j[1];
|
|
66
85
|
var resetBannedDirections = function () {
|
|
67
86
|
setBannedDirections(function (state) { return (state.length ? [] : state); });
|
|
68
87
|
previousDirectionRef.current = null;
|
|
69
88
|
};
|
|
89
|
+
var vars = useThemeVars();
|
|
70
90
|
var updateAnchorClientRect = function () { var _a; return setAnchorClientRect((_a = anchorRef === null || anchorRef === void 0 ? void 0 : anchorRef.current) === null || _a === void 0 ? void 0 : _a.getBoundingClientRect()); };
|
|
71
91
|
React.useLayoutEffect(updateAnchorClientRect, [anchorSize]);
|
|
72
92
|
usePopoverReposition({
|
|
@@ -77,14 +97,16 @@ export var Popover = React.forwardRef(function (props, componentRef) {
|
|
|
77
97
|
updateAnchorClientRect();
|
|
78
98
|
}
|
|
79
99
|
});
|
|
80
|
-
var
|
|
100
|
+
var _k = getComputedPositionAndDirection({
|
|
81
101
|
contentSize: { width: width, height: height },
|
|
82
102
|
viewportSize: {
|
|
83
103
|
// Размер вьюпорта без скроллбаров
|
|
84
104
|
width: document.documentElement.clientWidth,
|
|
85
105
|
height: document.documentElement.clientHeight
|
|
86
106
|
},
|
|
87
|
-
offset: offset
|
|
107
|
+
offset: typeof offset === 'string'
|
|
108
|
+
? vars.space["--space-" + offset]
|
|
109
|
+
: offset,
|
|
88
110
|
arrowOffset: arrowOffset,
|
|
89
111
|
direction: passedDirection,
|
|
90
112
|
possibleDirections: possibleDirections,
|
|
@@ -94,7 +116,7 @@ export var Popover = React.forwardRef(function (props, componentRef) {
|
|
|
94
116
|
: passedPosition,
|
|
95
117
|
anchorSize: anchorSize,
|
|
96
118
|
spareDirection: spareDirection
|
|
97
|
-
}), position =
|
|
119
|
+
}), position = _k.position, direction = _k.direction;
|
|
98
120
|
useEffect(function () { return onSetDirection && onSetDirection(direction); }, [direction]);
|
|
99
121
|
/**
|
|
100
122
|
* Может возникнуть ситуация, когда перерасчет поповера всегда будет выдавать 2 направления
|
|
@@ -112,6 +134,6 @@ export var Popover = React.forwardRef(function (props, componentRef) {
|
|
|
112
134
|
// Главное не сбрасывать при изменении размеров поповера, т.к. именно оно может вызвать бесконечный перебор
|
|
113
135
|
React.useLayoutEffect(resetBannedDirections, [props]);
|
|
114
136
|
var content = isRenderProp(children) ? children(direction) : children;
|
|
115
|
-
return (React.createElement(PortalWithTheme, __assign({}, otherProps, { preset: theme, container: window.document.body, ref: useForkRef([ref, componentRef]), style: __assign(__assign(
|
|
137
|
+
return (React.createElement(PortalWithTheme, __assign({}, otherProps, { preset: theme, className: cnPopover(null, [className]), container: window.document.body, ref: useForkRef([ref, componentRef]), style: __assign(__assign({}, style), (_a = {}, _a['--popover-top'] = ((position === null || position === void 0 ? void 0 : position.y) || 0) + window.scrollY + "px", _a['--popover-left'] = ((position === null || position === void 0 ? void 0 : position.x) || 0) + window.scrollX + "px", _a["--popover-width"] = equalAnchorWidth ? anchorSize.width + "px" : undefined, _a["--popover-pointer-events"] = isInteractive ? undefined : 'none', _a["--popover-visibility"] = position ? undefined : 'hidden', _a)) }),
|
|
116
138
|
React.createElement(ContextConsumer, { onClickOutside: onClickOutside, ignoreClicksInsideRefs: [ref, anchorRef || { current: null }] }, content)));
|
|
117
139
|
});
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { Direction, Position } from './Popover';
|
|
2
2
|
declare type Size = Pick<ClientRect, 'width' | 'height'>;
|
|
3
3
|
declare type PositionsByDirection = Record<Direction, NonNullable<Position>>;
|
|
4
|
+
export declare const convertPixelsToNumber: (pixels: string) => number;
|
|
4
5
|
export declare const getPositionsByDirection: ({ contentSize, anchorSize, position: { x, y }, offset, arrowOffset, }: {
|
|
5
6
|
contentSize: Size;
|
|
6
7
|
anchorSize: Size;
|
|
@@ -13,7 +14,7 @@ declare type ComputedPositionAndDirectionParams = {
|
|
|
13
14
|
contentSize: Size;
|
|
14
15
|
viewportSize: Size;
|
|
15
16
|
anchorSize?: Size;
|
|
16
|
-
offset
|
|
17
|
+
offset?: number | string;
|
|
17
18
|
arrowOffset?: number;
|
|
18
19
|
direction: Direction;
|
|
19
20
|
spareDirection: Direction;
|
|
@@ -3,6 +3,9 @@ var getPosition = function (x, y) { return ({
|
|
|
3
3
|
x: Math.round(x),
|
|
4
4
|
y: Math.round(y)
|
|
5
5
|
}); };
|
|
6
|
+
export var convertPixelsToNumber = function (pixels) {
|
|
7
|
+
return Number(pixels.slice(0, pixels.length - 2));
|
|
8
|
+
};
|
|
6
9
|
export var getPositionsByDirection = function (_a) {
|
|
7
10
|
var contentSize = _a.contentSize, anchorSize = _a.anchorSize, _b = _a.position, x = _b.x, y = _b.y, offset = _a.offset, _c = _a.arrowOffset, arrowOffset = _c === void 0 ? 0 : _c;
|
|
8
11
|
var contentWidth = contentSize.width, contentHeight = contentSize.height;
|
|
@@ -53,15 +56,16 @@ export var getPositionsByDirection = function (_a) {
|
|
|
53
56
|
};
|
|
54
57
|
};
|
|
55
58
|
export var getComputedPositionAndDirection = function (_a) {
|
|
56
|
-
var initialPosition = _a.position, contentSize = _a.contentSize, viewportSize = _a.viewportSize, _b = _a.anchorSize, anchorSize = _b === void 0 ? { width: 0, height: 0 } : _b,
|
|
59
|
+
var initialPosition = _a.position, contentSize = _a.contentSize, viewportSize = _a.viewportSize, _b = _a.anchorSize, anchorSize = _b === void 0 ? { width: 0, height: 0 } : _b, _c = _a.offset, offset = _c === void 0 ? 0 : _c, arrowOffset = _a.arrowOffset, initialDirection = _a.direction, possibleDirections = _a.possibleDirections, bannedDirections = _a.bannedDirections, spareDirection = _a.spareDirection;
|
|
57
60
|
if (!initialPosition) {
|
|
58
61
|
return { position: initialPosition, direction: initialDirection };
|
|
59
62
|
}
|
|
63
|
+
var currentOffset = typeof offset === 'string' ? convertPixelsToNumber(offset) : offset;
|
|
60
64
|
var positionsByDirection = getPositionsByDirection({
|
|
61
65
|
contentSize: contentSize,
|
|
62
66
|
anchorSize: anchorSize,
|
|
63
67
|
position: initialPosition,
|
|
64
|
-
offset:
|
|
68
|
+
offset: currentOffset,
|
|
65
69
|
arrowOffset: arrowOffset
|
|
66
70
|
});
|
|
67
71
|
var direction = __spread([initialDirection], possibleDirections).filter(function (dir) { return !bannedDirections.includes(dir); })
|
|
@@ -19,6 +19,10 @@
|
|
|
19
19
|
overflow: hidden;
|
|
20
20
|
}
|
|
21
21
|
|
|
22
|
+
.Sidebar:not(.Sidebar_hasOverlay) {
|
|
23
|
+
pointer-events: none;
|
|
24
|
+
}
|
|
25
|
+
|
|
22
26
|
.Sidebar_position_top {
|
|
23
27
|
-webkit-box-orient: vertical;
|
|
24
28
|
-webkit-box-direction: normal;
|
|
@@ -65,6 +69,7 @@
|
|
|
65
69
|
background-color: var(--color-bg-default);
|
|
66
70
|
-webkit-box-shadow: var(--shadow-modal);
|
|
67
71
|
box-shadow: var(--shadow-modal);
|
|
72
|
+
pointer-events: auto;
|
|
68
73
|
}
|
|
69
74
|
|
|
70
75
|
.Sidebar-Window_position_right,
|
|
@@ -47,7 +47,7 @@ export var Sidebar = function (props) {
|
|
|
47
47
|
useGlobalKeys({
|
|
48
48
|
Escape: function (e) { return isOpen && onEsc && onEsc(e); }
|
|
49
49
|
});
|
|
50
|
-
return (React.createElement(CSSTransition, { "in": isOpen, unmountOnExit: true, className: cnSidebar({ position: position }), classNames: cnForCssTransition(cnSidebar), timeout: 200, nodeRef: portalRef },
|
|
50
|
+
return (React.createElement(CSSTransition, { "in": isOpen, unmountOnExit: true, className: cnSidebar({ position: position, hasOverlay: hasOverlay }), classNames: cnForCssTransition(cnSidebar), timeout: 200, nodeRef: portalRef },
|
|
51
51
|
React.createElement(PortalWithTheme, { preset: theme, ref: portalRef, container: container, className: rootClassName, style: typeof (style === null || style === void 0 ? void 0 : style.zIndex) === 'number' ? { zIndex: style.zIndex } : undefined },
|
|
52
52
|
hasOverlay && React.createElement("div", { className: cnSidebar('Overlay'), "aria-label": "Overlay" }),
|
|
53
53
|
React.createElement("div", __assign({}, otherProps, { style: __assign(__assign({}, style), (typeof (style === null || style === void 0 ? void 0 : style.zIndex) === 'number' && { zIndex: (style === null || style === void 0 ? void 0 : style.zIndex) + 1 })), className: cnSidebar('Window', { size: size, position: position }, [className]), ref: ref }),
|
|
@@ -93,13 +93,13 @@ export declare type TableColumn<T extends TableRow> = {
|
|
|
93
93
|
export declare type TableProps<T extends TableRow> = {
|
|
94
94
|
columns: TableColumn<T>[];
|
|
95
95
|
rows: T[];
|
|
96
|
+
isResizable?: boolean;
|
|
96
97
|
filters?: Filters<T>;
|
|
97
98
|
onSortBy?: onSortBy<T>;
|
|
98
99
|
size?: Size;
|
|
99
100
|
stickyHeader?: boolean;
|
|
100
101
|
stickyColumns?: number;
|
|
101
102
|
minColumnWidth?: number;
|
|
102
|
-
isResizable?: boolean;
|
|
103
103
|
activeRow?: ActiveRow;
|
|
104
104
|
verticalAlign?: VerticalAlign;
|
|
105
105
|
headerVerticalAlign?: HeaderVerticalAlign;
|
|
@@ -17,7 +17,7 @@ import { TableResizer } from './Resizer/TableResizer';
|
|
|
17
17
|
import { TableRowsCollapse, } from './RowsCollapse/TableRowsCollapse';
|
|
18
18
|
import { TableSelectedOptionsList, } from './SelectedOptionsList/TableSelectedOptionsList';
|
|
19
19
|
import { fieldFiltersPresent, filterTableData, getSelectedFiltersList, isSelectedFiltersPresent, useSelectedFilters, } from './filtering';
|
|
20
|
-
import { createSortingState, getColumnLeftOffset, getColumnsSize, getNewSorting, Order, transformRows, useHeaderData, useLazyLoadData, } from './helpers';
|
|
20
|
+
import { createSortingState, getColumnLeftOffset, getColumnsSize, getMergedArray, getNewSorting, Order, transformRows, useHeaderData, useLazyLoadData, } from './helpers';
|
|
21
21
|
export { TableTextFilter } from './TextFilter/TableTextFilter';
|
|
22
22
|
export { TableFilterContainer } from './FilterContainer/TableFilterContainer';
|
|
23
23
|
export { TableNumberFilter } from './NumberFilter/TableNumberFilter';
|
|
@@ -96,6 +96,12 @@ var InternalTable = function (props, ref) {
|
|
|
96
96
|
var updateColumnWidth = function (idx, newWidth) {
|
|
97
97
|
setResizedColumnWidths(updateAt(resizedColumnWidths, idx, newWidth));
|
|
98
98
|
};
|
|
99
|
+
var overallColumnsWidth = useMemo(function () {
|
|
100
|
+
var columnsElements = Object.values(columnsRefs.current).filter(isNotNil);
|
|
101
|
+
var columnsElementsWidths = columnsElements.map(function (el) { return el.getBoundingClientRect().width; });
|
|
102
|
+
var resultArr = getMergedArray(columnsElementsWidths, resizedColumnWidths);
|
|
103
|
+
return resultArr.reduce(function (a, b) { return (a !== null && a !== void 0 ? a : 0) + (b !== null && b !== void 0 ? b : 0); });
|
|
104
|
+
}, [resizedColumnWidths, isResizable]);
|
|
99
105
|
React.useLayoutEffect(function () {
|
|
100
106
|
var columnsElements = Object.values(columnsRefs.current).filter(isNotNil);
|
|
101
107
|
if (columnsElements.length === 0)
|
|
@@ -104,15 +110,21 @@ var InternalTable = function (props, ref) {
|
|
|
104
110
|
setInitialColumnWidths(columnsElementsWidths);
|
|
105
111
|
// Проверяем, что таблица отрисовалась корректно, и устанавливаем значения ширин колонок после 1го и последующих рендера
|
|
106
112
|
if (columnsElements[0].getBoundingClientRect().left !==
|
|
107
|
-
columnsElements[columnsElements.length - 1].getBoundingClientRect().left
|
|
108
|
-
|
|
109
|
-
|
|
113
|
+
columnsElements[columnsElements.length - 1].getBoundingClientRect().left) {
|
|
114
|
+
var resultArr = getMergedArray(columnsElementsWidths, resizedColumnWidths);
|
|
115
|
+
// Выставляю в undefined так как если вычеслять значение для последней колонки так,
|
|
116
|
+
// чтобы заполнялось все свободное пространство, при изменении ширины таблицы в меньшую сторону
|
|
117
|
+
// ширина последней колонки изменяться не будет, а так она будет css'ом проставляться в auto
|
|
118
|
+
if ((overallColumnsWidth !== null && overallColumnsWidth !== void 0 ? overallColumnsWidth : tableWidth) < tableWidth) {
|
|
119
|
+
resultArr[resultArr.length - 1] = undefined;
|
|
120
|
+
}
|
|
121
|
+
return setResizedColumnWidths(resultArr);
|
|
110
122
|
}
|
|
111
123
|
// условие изменения ширины колонок при изменении ширины экрана (контейнера таблицы)
|
|
112
124
|
if (tableWidth > 0 && !isResizable) {
|
|
113
125
|
return setResizedColumnWidths(getColumnsWidth());
|
|
114
126
|
}
|
|
115
|
-
}, [tableWidth]);
|
|
127
|
+
}, [tableWidth, overallColumnsWidth]);
|
|
116
128
|
var isSortedByColumn = function (column) {
|
|
117
129
|
return getColumnSortByField(column) === (sorting === null || sorting === void 0 ? void 0 : sorting.by);
|
|
118
130
|
};
|
|
@@ -233,7 +245,7 @@ var InternalTable = function (props, ref) {
|
|
|
233
245
|
var flatRowsData = transformRows(filteredData, expandedRowIds, isExpandedRowsByDefault);
|
|
234
246
|
var rowsData = getSlicedRows(flatRowsData);
|
|
235
247
|
var tableStyle = {
|
|
236
|
-
'
|
|
248
|
+
'--table-grid-template-columns': getColumnsSize(resizedColumnWidths),
|
|
237
249
|
'--table-width': tableWidth + "px"
|
|
238
250
|
};
|
|
239
251
|
var hasMergedCells = columnsWithMetaData(lowHeaders).some(function (header) { return header.mergeCells; });
|
|
@@ -113,3 +113,4 @@ export declare const useLazyLoadData: (maxVisibleRows: number, scrollableEl: HTM
|
|
|
113
113
|
setBoundaryRef: (columnIdx: number, rowIdx: number) => React.RefObject<HTMLDivElement> | undefined;
|
|
114
114
|
};
|
|
115
115
|
export declare const transformRows: <T extends TableRow>(rows: T[], expandedRowIds: string[], isTableExpanded?: boolean | undefined) => TableTreeRow<T>[];
|
|
116
|
+
export declare function getMergedArray<TYPE>(mainArr: TYPE[], mergeArr: TYPE[]): TYPE[];
|
|
@@ -8,9 +8,7 @@ export var Order = {
|
|
|
8
8
|
desc: 'desc'
|
|
9
9
|
};
|
|
10
10
|
export var getColumnsSize = function (sizes) {
|
|
11
|
-
return sizes
|
|
12
|
-
.map(function (s) { return (isNumber(s) ? s + "px" : "minmax(min-content, " + 100 / sizes.length + "%)"); })
|
|
13
|
-
.join(' ');
|
|
11
|
+
return sizes.map(function (s) { return (isNumber(s) ? s + "px" : "auto"); }).join(' ');
|
|
14
12
|
};
|
|
15
13
|
export var getColumnLeftOffset = function (_a) {
|
|
16
14
|
var columnIndex = _a.columnIndex, resizedColumnWidths = _a.resizedColumnWidths, initialColumnWidths = _a.initialColumnWidths;
|
|
@@ -257,3 +255,12 @@ export var transformRows = function (rows, expandedRowIds, isTableExpanded) {
|
|
|
257
255
|
}
|
|
258
256
|
return rowsArr;
|
|
259
257
|
};
|
|
258
|
+
export function getMergedArray(mainArr, mergeArr) {
|
|
259
|
+
var _a;
|
|
260
|
+
var length = Math.max(mainArr.length, mergeArr.length);
|
|
261
|
+
var resultArr = [];
|
|
262
|
+
for (var i = 0; i < length; i++) {
|
|
263
|
+
resultArr.push((_a = mergeArr[i]) !== null && _a !== void 0 ? _a : mainArr[i]);
|
|
264
|
+
}
|
|
265
|
+
return resultArr;
|
|
266
|
+
}
|
package/createIcon/package.json
CHANGED
package/package.json
CHANGED
package/useDebounce/package.json
CHANGED
package/useFlag/package.json
CHANGED
package/useForkRef/package.json
CHANGED