@consta/uikit 4.31.2 → 4.33.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AttachmentCanary/index.d.ts +1 -0
- package/AttachmentCanary/index.js +1 -0
- package/PaginationCanary/index.d.ts +1 -0
- package/PaginationCanary/index.js +1 -0
- package/TooltipCanary/index.d.ts +1 -0
- package/TooltipCanary/index.js +1 -0
- package/__internal__/src/components/AttachmentCanary/Attachment.css +1 -0
- package/__internal__/src/components/AttachmentCanary/AttachmentCanary.d.ts +5 -0
- package/__internal__/src/components/AttachmentCanary/AttachmentCanary.js +2 -0
- package/__internal__/src/components/AttachmentCanary/AttachmentCanary.js.map +1 -0
- package/__internal__/src/components/AttachmentCanary/index.d.ts +1 -0
- package/__internal__/src/components/AttachmentCanary/index.js +2 -0
- package/__internal__/src/components/AttachmentCanary/index.js.map +1 -0
- package/__internal__/src/components/AttachmentCanary/types.d.ts +22 -0
- package/__internal__/src/components/AttachmentCanary/types.js +2 -0
- package/__internal__/src/components/AttachmentCanary/types.js.map +1 -0
- package/__internal__/src/components/BadgeGroup/BadgeGroup.css +1 -1
- package/__internal__/src/components/BadgeGroup/BadgeGroup.js +1 -1
- package/__internal__/src/components/BadgeGroup/BadgeGroup.js.map +1 -1
- package/__internal__/src/components/BookmarkTabsCanary/BookmarkTabsCanary.js +1 -1
- package/__internal__/src/components/BookmarkTabsCanary/BookmarkTabsCanary.js.map +1 -1
- package/__internal__/src/components/BookmarkTabsCanary/BookmarkTabsTab/BookmarkTabsTab.css +1 -1
- package/__internal__/src/components/BookmarkTabsCanary/BookmarkTabsTab/BookmarkTabsTab.js +1 -1
- package/__internal__/src/components/BookmarkTabsCanary/BookmarkTabsTab/BookmarkTabsTab.js.map +1 -1
- package/__internal__/src/components/BookmarkTabsCanary/types.d.ts +2 -2
- package/__internal__/src/components/BookmarkTabsCanary/types.js.map +1 -1
- package/__internal__/src/components/BookmarkTabsCanary/useBookmarkTabs.d.ts +1 -1
- package/__internal__/src/components/BookmarkTabsCanary/useBookmarkTabs.js.map +1 -1
- package/__internal__/src/components/CheckboxGroup/CheckboxGroup.js +1 -1
- package/__internal__/src/components/CheckboxGroup/CheckboxGroup.js.map +1 -1
- package/__internal__/src/components/CheckboxGroup/helper.d.ts +1 -0
- package/__internal__/src/components/CheckboxGroup/types.d.ts +13 -9
- package/__internal__/src/components/CheckboxGroup/types.js +1 -1
- package/__internal__/src/components/CheckboxGroup/types.js.map +1 -1
- package/__internal__/src/components/ChoiceGroup/types.d.ts +3 -3
- package/__internal__/src/components/ChoiceGroup/types.js.map +1 -1
- package/__internal__/src/components/ChoiceGroupDeprecated/ChoiceGroupDeprecated.d.ts +3 -3
- package/__internal__/src/components/ChoiceGroupDeprecated/ChoiceGroupDeprecated.js.map +1 -1
- package/__internal__/src/components/Combobox/Combobox.js +1 -1
- package/__internal__/src/components/Combobox/Combobox.js.map +1 -1
- package/__internal__/src/components/Combobox/helpers.d.ts +3 -1
- package/__internal__/src/components/Combobox/helpers.js +1 -1
- package/__internal__/src/components/Combobox/helpers.js.map +1 -1
- package/__internal__/src/components/ComboboxCanary/ComboboxCanary.js +1 -1
- package/__internal__/src/components/ComboboxCanary/ComboboxCanary.js.map +1 -1
- package/__internal__/src/components/ComboboxCanary/helpers.d.ts +3 -1
- package/__internal__/src/components/ComboboxCanary/helpers.js +1 -1
- package/__internal__/src/components/ComboboxCanary/helpers.js.map +1 -1
- package/__internal__/src/components/DateTime/helpers/getHandleSelectDate.d.ts +3 -3
- package/__internal__/src/components/DateTime/helpers/getHandleSelectDate.js.map +1 -1
- package/__internal__/src/components/DateTime/helpers/types.d.ts +4 -4
- package/__internal__/src/components/DateTime/helpers/types.js.map +1 -1
- package/__internal__/src/components/DragNDropField/DragNDropFieldTooltip/DragNDropFieldTooltip.js +1 -1
- package/__internal__/src/components/DragNDropField/DragNDropFieldTooltip/DragNDropFieldTooltip.js.map +1 -1
- package/__internal__/src/components/Loader/Loader.css +1 -1
- package/__internal__/src/components/Loader/Loader.d.ts +1 -1
- package/__internal__/src/components/Loader/Loader.js +1 -1
- package/__internal__/src/components/Loader/Loader.js.map +1 -1
- package/__internal__/src/components/LoaderCanary/Loader.css +1 -1
- package/__internal__/src/components/LoaderCanary/LoaderCanary.d.ts +2 -2
- package/__internal__/src/components/LoaderCanary/types.d.ts +1 -1
- package/__internal__/src/components/LoaderCanary/types.js +1 -1
- package/__internal__/src/components/LoaderCanary/types.js.map +1 -1
- package/__internal__/src/components/PaginationCanary/Pagination.css +1 -0
- package/__internal__/src/components/PaginationCanary/PaginationArrow/PaginationArrow.css +1 -0
- package/__internal__/src/components/PaginationCanary/PaginationArrow/PaginationArrow.d.ts +11 -0
- package/__internal__/src/components/PaginationCanary/PaginationArrow/PaginationArrow.js +2 -0
- package/__internal__/src/components/PaginationCanary/PaginationArrow/PaginationArrow.js.map +1 -0
- package/__internal__/src/components/PaginationCanary/PaginationArrow/index.d.ts +1 -0
- package/__internal__/src/components/PaginationCanary/PaginationArrow/index.js +2 -0
- package/__internal__/src/components/PaginationCanary/PaginationArrow/index.js.map +1 -0
- package/__internal__/src/components/PaginationCanary/PaginationBase/PaginationBase.css +1 -0
- package/__internal__/src/components/PaginationCanary/PaginationBase/PaginationBase.d.ts +3 -0
- package/__internal__/src/components/PaginationCanary/PaginationBase/PaginationBase.js +2 -0
- package/__internal__/src/components/PaginationCanary/PaginationBase/PaginationBase.js.map +1 -0
- package/__internal__/src/components/PaginationCanary/PaginationBase/index.d.ts +1 -0
- package/__internal__/src/components/PaginationCanary/PaginationBase/index.js +2 -0
- package/__internal__/src/components/PaginationCanary/PaginationBase/index.js.map +1 -0
- package/__internal__/src/components/PaginationCanary/PaginationCanary.d.ts +3 -0
- package/__internal__/src/components/PaginationCanary/PaginationCanary.js +2 -0
- package/__internal__/src/components/PaginationCanary/PaginationCanary.js.map +1 -0
- package/__internal__/src/components/PaginationCanary/PaginationItem/PaginationItem.css +1 -0
- package/__internal__/src/components/PaginationCanary/PaginationItem/PaginationItem.d.ts +3 -0
- package/__internal__/src/components/PaginationCanary/PaginationItem/PaginationItem.js +2 -0
- package/__internal__/src/components/PaginationCanary/PaginationItem/PaginationItem.js.map +1 -0
- package/__internal__/src/components/PaginationCanary/PaginationItem/index.d.ts +1 -0
- package/__internal__/src/components/PaginationCanary/PaginationItem/index.js +2 -0
- package/__internal__/src/components/PaginationCanary/PaginationItem/index.js.map +1 -0
- package/__internal__/src/components/PaginationCanary/PaginationList/PaginationList.css +1 -0
- package/__internal__/src/components/PaginationCanary/PaginationList/PaginationList.d.ts +3 -0
- package/__internal__/src/components/PaginationCanary/PaginationList/PaginationList.js +2 -0
- package/__internal__/src/components/PaginationCanary/PaginationList/PaginationList.js.map +1 -0
- package/__internal__/src/components/PaginationCanary/PaginationList/index.d.ts +1 -0
- package/__internal__/src/components/PaginationCanary/PaginationList/index.js +2 -0
- package/__internal__/src/components/PaginationCanary/PaginationList/index.js.map +1 -0
- package/__internal__/src/components/PaginationCanary/PaginationNumberInput/PaginationNumberInput.css +1 -0
- package/__internal__/src/components/PaginationCanary/PaginationNumberInput/PaginationNumberInput.d.ts +10 -0
- package/__internal__/src/components/PaginationCanary/PaginationNumberInput/PaginationNumberInput.js +2 -0
- package/__internal__/src/components/PaginationCanary/PaginationNumberInput/PaginationNumberInput.js.map +1 -0
- package/__internal__/src/components/PaginationCanary/PaginationNumberInput/index.d.ts +1 -0
- package/__internal__/src/components/PaginationCanary/PaginationNumberInput/index.js +2 -0
- package/__internal__/src/components/PaginationCanary/PaginationNumberInput/index.js.map +1 -0
- package/__internal__/src/components/PaginationCanary/helpers.d.ts +560 -0
- package/__internal__/src/components/PaginationCanary/helpers.js +2 -0
- package/__internal__/src/components/PaginationCanary/helpers.js.map +1 -0
- package/__internal__/src/components/PaginationCanary/index.d.ts +2 -0
- package/__internal__/src/components/PaginationCanary/index.js +2 -0
- package/__internal__/src/components/PaginationCanary/index.js.map +1 -0
- package/__internal__/src/components/PaginationCanary/types.d.ts +148 -0
- package/__internal__/src/components/PaginationCanary/types.js +2 -0
- package/__internal__/src/components/PaginationCanary/types.js.map +1 -0
- package/__internal__/src/components/PaginationCanary/usePaginationItems.d.ts +19 -0
- package/__internal__/src/components/PaginationCanary/usePaginationItems.js +2 -0
- package/__internal__/src/components/PaginationCanary/usePaginationItems.js.map +1 -0
- package/__internal__/src/components/PaginationCanary/usePaginationKeys.d.ts +10 -0
- package/__internal__/src/components/PaginationCanary/usePaginationKeys.js +2 -0
- package/__internal__/src/components/PaginationCanary/usePaginationKeys.js.map +1 -0
- package/__internal__/src/components/ProgressStepBar/ProgressStepBarItem/ProgressStepBarItem.js +1 -1
- package/__internal__/src/components/ProgressStepBar/ProgressStepBarItem/ProgressStepBarItem.js.map +1 -1
- package/__internal__/src/components/Responses/Responses.css +1 -1
- package/__internal__/src/components/Responses/Responses.d.ts +1 -1
- package/__internal__/src/components/Responses/Responses.js +1 -1
- package/__internal__/src/components/Responses/Responses.js.map +1 -1
- package/__internal__/src/components/Responses403/Responses403.js +1 -1
- package/__internal__/src/components/Responses403/Responses403.js.map +1 -1
- package/__internal__/src/components/Responses500/Responses500.d.ts +2 -2
- package/__internal__/src/components/Responses500/Responses500.js +1 -1
- package/__internal__/src/components/Responses500/Responses500.js.map +1 -1
- package/__internal__/src/components/Responses503/Responses503.d.ts +2 -2
- package/__internal__/src/components/Responses503/Responses503.js +1 -1
- package/__internal__/src/components/Responses503/Responses503.js.map +1 -1
- package/__internal__/src/components/ResponsesConnectionError/ResponsesConnectionError.js +1 -1
- package/__internal__/src/components/ResponsesConnectionError/ResponsesConnectionError.js.map +1 -1
- package/__internal__/src/components/ResponsesDeleted/ResponsesDeleted.js +1 -1
- package/__internal__/src/components/ResponsesDeleted/ResponsesDeleted.js.map +1 -1
- package/__internal__/src/components/Select/Select.js +1 -1
- package/__internal__/src/components/Select/Select.js.map +1 -1
- package/__internal__/src/components/Select/helpers.d.ts +2 -1
- package/__internal__/src/components/Select/helpers.js +1 -1
- package/__internal__/src/components/Select/helpers.js.map +1 -1
- package/__internal__/src/components/SelectCanary/SelectCanary.js +1 -1
- package/__internal__/src/components/SelectCanary/SelectCanary.js.map +1 -1
- package/__internal__/src/components/SelectCanary/helpers.d.ts +2 -1
- package/__internal__/src/components/SelectCanary/helpers.js +1 -1
- package/__internal__/src/components/SelectCanary/helpers.js.map +1 -1
- package/__internal__/src/components/SelectComponents/Select.css +1 -1
- package/__internal__/src/components/SelectComponentsCanary/Select.css +1 -1
- package/__internal__/src/components/Slider/SliderPoint/SliderPoint.js +1 -1
- package/__internal__/src/components/Slider/SliderPoint/SliderPoint.js.map +1 -1
- package/__internal__/src/components/Table/filtering.js +1 -1
- package/__internal__/src/components/Table/filtering.js.map +1 -1
- package/__internal__/src/components/Table/helpers.js +1 -1
- package/__internal__/src/components/Table/helpers.js.map +1 -1
- package/__internal__/src/components/Tabs/Tabs.js +1 -1
- package/__internal__/src/components/Tabs/Tabs.js.map +1 -1
- package/__internal__/src/components/Tabs/{FitModeDropdownWrapper → TabsFitModeDropdownWrapper}/TabsFitModeDropdownWrapper.d.ts +1 -1
- package/__internal__/src/components/Tabs/TabsFitModeDropdownWrapper/TabsFitModeDropdownWrapper.js +2 -0
- package/__internal__/src/components/Tabs/TabsFitModeDropdownWrapper/TabsFitModeDropdownWrapper.js.map +1 -0
- package/__internal__/src/components/Tabs/TabsFitModeDropdownWrapper/useFittingItems.js.map +1 -0
- package/__internal__/src/components/Tabs/TabsFitModeScrollWrapper/TabsFitModeScrollWrapper.js +2 -0
- package/__internal__/src/components/Tabs/TabsFitModeScrollWrapper/TabsFitModeScrollWrapper.js.map +1 -0
- package/__internal__/src/components/Tabs/TabsFitModeScrollWrapper/__test__/helpers.test.js.map +1 -0
- package/__internal__/src/components/Tabs/TabsLine/TabsLine.js.map +1 -0
- package/__internal__/src/components/Tabs/TabsListWrapper/TabsListWrapper.d.ts +2 -0
- package/__internal__/src/components/Tabs/TabsListWrapper/TabsListWrapper.js +2 -0
- package/__internal__/src/components/Tabs/TabsListWrapper/TabsListWrapper.js.map +1 -0
- package/__internal__/src/components/Tabs/TabsListWrapper/index.d.ts +1 -0
- package/__internal__/src/components/Tabs/TabsListWrapper/index.js +2 -0
- package/__internal__/src/components/Tabs/TabsListWrapper/index.js.map +1 -0
- package/__internal__/src/components/Tabs/TabsMoreItems/TabsMoreItems.css +1 -0
- package/__internal__/src/components/Tabs/TabsMoreItems/TabsMoreItems.js +2 -0
- package/__internal__/src/components/Tabs/TabsMoreItems/TabsMoreItems.js.map +1 -0
- package/__internal__/src/components/Tabs/TabsTab/TabsTab.js.map +1 -0
- package/__internal__/src/components/Tabs/helpers.d.ts +329 -329
- package/__internal__/src/components/Tabs/helpers.js +1 -1
- package/__internal__/src/components/Tabs/helpers.js.map +1 -1
- package/__internal__/src/components/Tabs/index.d.ts +1 -1
- package/__internal__/src/components/Tabs/index.js +1 -1
- package/__internal__/src/components/Tabs/index.js.map +1 -1
- package/__internal__/src/components/Tabs/types.d.ts +3 -2
- package/__internal__/src/components/Tabs/types.js.map +1 -1
- package/__internal__/src/components/TabsDeprecated/FitModeScrollWrapper/helpers.js +1 -1
- package/__internal__/src/components/TabsDeprecated/FitModeScrollWrapper/helpers.js.map +1 -1
- package/__internal__/src/components/Theme/_color/Theme_color_gpnDark.css +1 -1
- package/__internal__/src/components/TooltipCanary/Tooltip.css +1 -0
- package/__internal__/src/components/TooltipCanary/TooltipCanary.d.ts +4 -0
- package/__internal__/src/components/TooltipCanary/TooltipCanary.js +2 -0
- package/__internal__/src/components/TooltipCanary/TooltipCanary.js.map +1 -0
- package/__internal__/src/components/TooltipCanary/index.d.ts +2 -0
- package/__internal__/src/components/TooltipCanary/index.js +2 -0
- package/__internal__/src/components/TooltipCanary/index.js.map +1 -0
- package/__internal__/src/components/TooltipCanary/types.d.ts +23 -0
- package/__internal__/src/components/TooltipCanary/types.js +2 -0
- package/__internal__/src/components/TooltipCanary/types.js.map +1 -0
- package/__internal__/src/components/UserSelect/UserSelect.js +1 -1
- package/__internal__/src/components/UserSelect/UserSelect.js.map +1 -1
- package/__internal__/src/components/UserSelect/helpers.d.ts +3 -1
- package/__internal__/src/components/UserSelect/helpers.js +1 -1
- package/__internal__/src/components/UserSelect/helpers.js.map +1 -1
- package/__internal__/src/components/UserSelectCanary/UserSelectCanary.js +1 -1
- package/__internal__/src/components/UserSelectCanary/UserSelectCanary.js.map +1 -1
- package/__internal__/src/components/UserSelectCanary/helpers.d.ts +3 -1
- package/__internal__/src/components/UserSelectCanary/helpers.js +1 -1
- package/__internal__/src/components/UserSelectCanary/helpers.js.map +1 -1
- package/__internal__/src/hocs/withTooltip/withTooltip.d.ts +1 -1
- package/__internal__/src/hocs/withTooltip/withTooltip.js +1 -1
- package/__internal__/src/hocs/withTooltip/withTooltip.js.map +1 -1
- package/package.json +1 -1
- package/__internal__/src/components/Tabs/FitModeDropdownWrapper/TabsFitModeDropdownWrapper.js +0 -2
- package/__internal__/src/components/Tabs/FitModeDropdownWrapper/TabsFitModeDropdownWrapper.js.map +0 -1
- package/__internal__/src/components/Tabs/FitModeDropdownWrapper/useFittingItems.js.map +0 -1
- package/__internal__/src/components/Tabs/FitModeScrollWrapper/TabsFitModeScrollWrapper.js +0 -2
- package/__internal__/src/components/Tabs/FitModeScrollWrapper/TabsFitModeScrollWrapper.js.map +0 -1
- package/__internal__/src/components/Tabs/FitModeScrollWrapper/__test__/helpers.test.js.map +0 -1
- package/__internal__/src/components/Tabs/Line/TabsLine.js.map +0 -1
- package/__internal__/src/components/Tabs/MoreItems/TabsMoreItems.css +0 -1
- package/__internal__/src/components/Tabs/MoreItems/TabsMoreItems.js +0 -2
- package/__internal__/src/components/Tabs/MoreItems/TabsMoreItems.js.map +0 -1
- package/__internal__/src/components/Tabs/Tab/TabsTab.js.map +0 -1
- /package/__internal__/src/components/Tabs/{FitModeDropdownWrapper → TabsFitModeDropdownWrapper}/TabsFitModeDropdownWrapper.css +0 -0
- /package/__internal__/src/components/Tabs/{FitModeDropdownWrapper → TabsFitModeDropdownWrapper}/useFittingItems.d.ts +0 -0
- /package/__internal__/src/components/Tabs/{FitModeDropdownWrapper → TabsFitModeDropdownWrapper}/useFittingItems.js +0 -0
- /package/__internal__/src/components/Tabs/{FitModeScrollWrapper → TabsFitModeScrollWrapper}/TabsFitModeScrollWrapper.css +0 -0
- /package/__internal__/src/components/Tabs/{FitModeScrollWrapper → TabsFitModeScrollWrapper}/TabsFitModeScrollWrapper.d.ts +0 -0
- /package/__internal__/src/components/Tabs/{FitModeScrollWrapper → TabsFitModeScrollWrapper}/__test__/helpers.test.d.ts +0 -0
- /package/__internal__/src/components/Tabs/{FitModeScrollWrapper → TabsFitModeScrollWrapper}/__test__/helpers.test.js +0 -0
- /package/__internal__/src/components/Tabs/{Line → TabsLine}/TabsLine.css +0 -0
- /package/__internal__/src/components/Tabs/{Line → TabsLine}/TabsLine.d.ts +0 -0
- /package/__internal__/src/components/Tabs/{Line → TabsLine}/TabsLine.js +0 -0
- /package/__internal__/src/components/Tabs/{MoreItems → TabsMoreItems}/TabsMoreItems.d.ts +0 -0
- /package/__internal__/src/components/Tabs/{Tab → TabsTab}/TabsTab.css +0 -0
- /package/__internal__/src/components/Tabs/{Tab → TabsTab}/TabsTab.d.ts +0 -0
- /package/__internal__/src/components/Tabs/{Tab → TabsTab}/TabsTab.js +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"filtering.js","names":["React","isDefined","getOptionsForFilters","filters","field","filter","filterField","map","id","name","value","label","getSelectedFiltersInitialState","reduce","fieldAcc","fieldCur","selected","fieldFiltersPresent","tableFilters","some","isSelectedFiltersPresent","selectedFilters","Object","values","filterGroup","length","getSelectedFiltersList","columns","acc","cur","currentFieldFilters","accessor","orderedFilters","option","find","filterId","filterTableData","data","mutableFilteredData","row","copiedRow","rows","columnNames","keys","rowIsValid","columnName","columnFilters","cellIsValid","cellContent","filterer","push","useSelectedFilters","onFiltersUpdated","useState","setSelectedFilters","updateSelectedFilters","tooltipSelectedFilters","newSelectedFilters","removeOneSelectedFilter","availableFilters","filterToDelete","f","removeAllSelectedFilters","initialSelectedFilters"],"sources":["../../../../../src/components/Table/filtering.ts"],"sourcesContent":["import React from 'react';\n\nimport { isDefined } from '../../utils/type-guards';\nimport { SortByProps, TableColumn, TableRow, ValueOf } from './Table';\n\nexport type FilterComponentProps = {\n onConfirm: (value: unknown) => void;\n onCancel: () => void;\n filterValue?: unknown;\n} & Record<string, unknown>;\n\nexport type Filters<T extends TableRow> = ValueOf<{\n [K in keyof T]: {\n id: string;\n name: string;\n field: K extends string ? K : never;\n filterer(value: any, filterValue?: unknown): boolean;\n } & (\n | { component?: never }\n | {\n component: {\n name: React.FC<FilterComponentProps>;\n props?: Omit<FilterComponentProps, 'onConfirm' | 'filterValue'>;\n };\n }\n );\n}>[];\n\nexport type onSortBy<T extends TableRow> = (\n props: SortByProps<T> | null,\n) => void;\n\nexport type FieldSelectedValues = string[];\n\ntype SelectedFilter = {\n selected: FieldSelectedValues;\n value?: any;\n};\n\nexport type SelectedFilters = { [field: string]: SelectedFilter };\n\ntype SelectedFiltersList = Array<{\n id: string;\n name: string;\n}>;\n\nexport const getOptionsForFilters = <T extends TableRow>(\n filters: Filters<T>,\n field: string,\n): { value: string; label: string }[] => {\n return filters\n .filter(({ field: filterField }) => filterField === field)\n .map(({ id, name }) => ({ value: id, label: name }));\n};\n\nexport const getSelectedFiltersInitialState = <T extends TableRow>(\n filters?: Filters<T>,\n): SelectedFilters => {\n if (!filters) {\n return {};\n }\n\n return filters.reduce<SelectedFilters>((fieldAcc, fieldCur) => {\n if (!fieldAcc[fieldCur.field]) {\n return {\n ...fieldAcc,\n [fieldCur.field]: {\n selected: [],\n },\n };\n }\n\n return fieldAcc;\n }, {});\n};\n\nexport const fieldFiltersPresent = <T extends TableRow>(\n tableFilters: Filters<T>,\n field: string,\n): boolean => {\n return tableFilters.some(({ field: filterField }) => filterField === field);\n};\n\nexport const isSelectedFiltersPresent = (\n selectedFilters: SelectedFilters,\n): boolean => {\n return Object.values(selectedFilters).some(\n (filterGroup) => filterGroup?.selected!.length > 0,\n );\n};\n\nexport const getSelectedFiltersList = <T extends TableRow>({\n filters,\n selectedFilters,\n columns,\n}: {\n filters: Filters<T>;\n selectedFilters: SelectedFilters;\n columns: Array<TableColumn<T>>;\n}): SelectedFiltersList => {\n return columns.reduce<SelectedFiltersList>((acc, cur) => {\n const currentFieldFilters = selectedFilters[cur.accessor!] || [];\n let orderedFilters: SelectedFiltersList = [];\n\n if (\n currentFieldFilters.selected &&\n currentFieldFilters.selected.length > 0\n ) {\n orderedFilters = currentFieldFilters\n .selected!.map((filter) => {\n const option = filters.find(\n ({ id: filterId }) => filterId === filter,\n );\n\n return option\n ? {\n id: option.id,\n name: option.name,\n value: currentFieldFilters.value,\n }\n : undefined;\n })\n .filter(isDefined);\n }\n\n return orderedFilters.length > 0 ? [...acc, ...orderedFilters] : acc;\n }, []);\n};\n\nexport const filterTableData = <T extends TableRow>({\n data,\n filters,\n selectedFilters,\n}: {\n data: T[];\n filters: Filters<T>;\n selectedFilters: SelectedFilters;\n}): T[] => {\n const mutableFilteredData = [];\n\n for (const row of data) {\n const copiedRow = { ...row };\n\n if (copiedRow.rows?.length) {\n copiedRow.rows = filterTableData({\n data: copiedRow.rows as T[],\n filters,\n selectedFilters,\n });\n }\n\n const columnNames = Object.keys(copiedRow);\n let rowIsValid = true;\n\n for (const columnName of columnNames) {\n const columnFilters = selectedFilters[columnName];\n\n if (columnFilters && columnFilters.selected!.length) {\n let cellIsValid = false;\n const cellContent = copiedRow[columnName as keyof T];\n\n if (columnFilters.value) {\n const [filterId] = columnFilters.selected;\n const filter = filters.find(({ id }) => id === filterId);\n\n if (filter!.filterer(cellContent, columnFilters.value)) {\n cellIsValid = true;\n }\n } else {\n for (const filterId of columnFilters.selected!) {\n const filter = filters.find(({ id }) => id === filterId);\n\n if (columnFilters.value === null) {\n cellIsValid = true;\n break;\n }\n\n if (filter && filter.filterer(cellContent)) {\n cellIsValid = true;\n break;\n }\n }\n }\n\n if (!cellIsValid) {\n rowIsValid = false;\n }\n }\n\n if (!rowIsValid) {\n break;\n }\n }\n\n if (rowIsValid) {\n mutableFilteredData.push(copiedRow);\n }\n }\n\n return mutableFilteredData;\n};\n\n/* istanbul ignore next */\nexport const useSelectedFilters = <T extends TableRow>(\n filters?: Filters<T>,\n onFiltersUpdated?: (filters: SelectedFilters) => void,\n): {\n selectedFilters: SelectedFilters;\n updateSelectedFilters: (\n field: string,\n tooltipSelectedFilters: FieldSelectedValues,\n value?: unknown,\n ) => void;\n removeOneSelectedFilter: (\n availableFilters: Filters<T>,\n filter: string,\n ) => void;\n removeAllSelectedFilters: (availableFilters: Filters<T>) => void;\n} => {\n const [selectedFilters, setSelectedFilters] = React.useState<SelectedFilters>(\n getSelectedFiltersInitialState(filters),\n );\n\n const updateSelectedFilters = (\n field: string,\n tooltipSelectedFilters: FieldSelectedValues,\n value?: unknown,\n ): void => {\n const newSelectedFilters = {\n ...selectedFilters,\n [field]: {\n selected: [...tooltipSelectedFilters],\n value,\n },\n };\n\n setSelectedFilters(newSelectedFilters);\n onFiltersUpdated && onFiltersUpdated(newSelectedFilters);\n };\n\n const removeOneSelectedFilter = (\n availableFilters: Filters<T>,\n filter: string,\n ): void => {\n const filterToDelete = availableFilters.find(({ id }) => id === filter);\n\n if (filterToDelete) {\n updateSelectedFilters(\n filterToDelete.field,\n (selectedFilters[filterToDelete.field] || {}).selected?.filter(\n (f) => f !== filter,\n ),\n );\n }\n };\n\n const removeAllSelectedFilters = (availableFilters: Filters<T>): void => {\n const initialSelectedFilters =\n getSelectedFiltersInitialState(availableFilters);\n setSelectedFilters(initialSelectedFilters);\n onFiltersUpdated && onFiltersUpdated(initialSelectedFilters);\n };\n\n return {\n selectedFilters,\n updateSelectedFilters,\n removeOneSelectedFilter,\n removeAllSelectedFilters,\n };\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"filtering.js","names":["React","isDefined","getOptionsForFilters","filters","field","filter","filterField","map","id","name","value","label","getSelectedFiltersInitialState","reduce","fieldAcc","fieldCur","selected","fieldFiltersPresent","tableFilters","some","isSelectedFiltersPresent","selectedFilters","Object","values","filterGroup","length","getSelectedFiltersList","columns","acc","cur","currentFieldFilters","accessor","orderedFilters","option","find","filterId","filterTableData","data","mutableFilteredData","row","copiedRow","rows","columnNames","keys","rowIsValid","columnName","columnFilters","cellIsValid","cellContent","filterer","push","useSelectedFilters","onFiltersUpdated","useState","setSelectedFilters","updateSelectedFilters","tooltipSelectedFilters","newSelectedFilters","removeOneSelectedFilter","availableFilters","filterToDelete","f","removeAllSelectedFilters","initialSelectedFilters"],"sources":["../../../../../src/components/Table/filtering.ts"],"sourcesContent":["import React from 'react';\n\nimport { isDefined } from '../../utils/type-guards';\nimport { SortByProps, TableColumn, TableRow, ValueOf } from './Table';\n\nexport type FilterComponentProps = {\n onConfirm: (value: unknown) => void;\n onCancel: () => void;\n filterValue?: unknown;\n} & Record<string, unknown>;\n\nexport type Filters<T extends TableRow> = ValueOf<{\n [K in keyof T]: {\n id: string;\n name: string;\n field: K extends string ? K : never;\n filterer(value: any, filterValue?: unknown): boolean;\n } & (\n | { component?: never }\n | {\n component: {\n name: React.FC<FilterComponentProps>;\n props?: Omit<FilterComponentProps, 'onConfirm' | 'filterValue'>;\n };\n }\n );\n}>[];\n\nexport type onSortBy<T extends TableRow> = (\n props: SortByProps<T> | null,\n) => void;\n\nexport type FieldSelectedValues = string[];\n\ntype SelectedFilter = {\n selected: FieldSelectedValues;\n value?: any;\n};\n\nexport type SelectedFilters = { [field: string]: SelectedFilter };\n\ntype SelectedFiltersList = Array<{\n id: string;\n name: string;\n}>;\n\nexport const getOptionsForFilters = <T extends TableRow>(\n filters: Filters<T>,\n field: string,\n): { value: string; label: string }[] => {\n return filters\n .filter(({ field: filterField }) => filterField === field)\n .map(({ id, name }) => ({ value: id, label: name }));\n};\n\nexport const getSelectedFiltersInitialState = <T extends TableRow>(\n filters?: Filters<T>,\n): SelectedFilters => {\n if (!filters) {\n return {};\n }\n\n return filters.reduce<SelectedFilters>((fieldAcc, fieldCur) => {\n if (!fieldAcc[fieldCur.field]) {\n return {\n ...fieldAcc,\n [fieldCur.field]: {\n selected: [],\n },\n };\n }\n\n return fieldAcc;\n }, {});\n};\n\nexport const fieldFiltersPresent = <T extends TableRow>(\n tableFilters: Filters<T>,\n field: string,\n): boolean => {\n return tableFilters.some(({ field: filterField }) => filterField === field);\n};\n\nexport const isSelectedFiltersPresent = (\n selectedFilters: SelectedFilters,\n): boolean => {\n return Object.values(selectedFilters).some(\n (filterGroup) => filterGroup?.selected!.length > 0,\n );\n};\n\nexport const getSelectedFiltersList = <T extends TableRow>({\n filters,\n selectedFilters,\n columns,\n}: {\n filters: Filters<T>;\n selectedFilters: SelectedFilters;\n columns: Array<TableColumn<T>>;\n}): SelectedFiltersList => {\n return columns.reduce<SelectedFiltersList>((acc, cur) => {\n const currentFieldFilters = selectedFilters[cur.accessor!] || [];\n let orderedFilters: SelectedFiltersList = [];\n\n if (\n currentFieldFilters.selected &&\n currentFieldFilters.selected.length > 0\n ) {\n orderedFilters = currentFieldFilters\n .selected!.map((filter) => {\n const option = filters.find(\n ({ id: filterId }) => filterId === filter,\n );\n\n return option\n ? {\n id: option.id,\n name: option.name,\n value: currentFieldFilters.value,\n }\n : undefined;\n })\n .filter(isDefined);\n }\n\n return orderedFilters.length > 0 ? [...acc, ...orderedFilters] : acc;\n }, []);\n};\n\nexport const filterTableData = <T extends TableRow>({\n data,\n filters,\n selectedFilters,\n}: {\n data: T[];\n filters: Filters<T>;\n selectedFilters: SelectedFilters;\n}): T[] => {\n const mutableFilteredData = [];\n\n for (const row of data) {\n const copiedRow = { ...row };\n\n if (copiedRow.rows?.length) {\n copiedRow.rows = filterTableData({\n data: copiedRow.rows as T[],\n filters,\n selectedFilters,\n });\n }\n\n const columnNames = Object.keys(copiedRow);\n let rowIsValid = true;\n\n for (const columnName of columnNames) {\n const columnFilters = selectedFilters[columnName];\n\n if (columnFilters && columnFilters.selected!.length) {\n let cellIsValid = false;\n const cellContent = copiedRow[columnName as keyof T];\n\n if (columnFilters.value) {\n const [filterId] = columnFilters.selected;\n const filter = filters.find(({ id }) => id === filterId);\n\n if (filter!.filterer(cellContent, columnFilters.value)) {\n cellIsValid = true;\n }\n } else {\n for (const filterId of columnFilters.selected!) {\n const filter = filters.find(({ id }) => id === filterId);\n\n if (columnFilters.value === null) {\n cellIsValid = true;\n break;\n }\n\n if (filter && filter.filterer(cellContent)) {\n cellIsValid = true;\n break;\n }\n }\n }\n\n if (!cellIsValid) {\n rowIsValid = false;\n }\n }\n\n if (!rowIsValid) {\n break;\n }\n }\n\n if (rowIsValid) {\n mutableFilteredData.push(copiedRow);\n }\n }\n\n return mutableFilteredData;\n};\n\n/* istanbul ignore next */\nexport const useSelectedFilters = <T extends TableRow>(\n filters?: Filters<T>,\n onFiltersUpdated?: (filters: SelectedFilters) => void,\n): {\n selectedFilters: SelectedFilters;\n updateSelectedFilters: (\n field: string,\n tooltipSelectedFilters: FieldSelectedValues,\n value?: unknown,\n ) => void;\n removeOneSelectedFilter: (\n availableFilters: Filters<T>,\n filter: string,\n ) => void;\n removeAllSelectedFilters: (availableFilters: Filters<T>) => void;\n} => {\n const [selectedFilters, setSelectedFilters] = React.useState<SelectedFilters>(\n getSelectedFiltersInitialState(filters),\n );\n\n const updateSelectedFilters = (\n field: string,\n tooltipSelectedFilters: FieldSelectedValues,\n value?: unknown,\n ): void => {\n const newSelectedFilters = {\n ...selectedFilters,\n [field]: {\n selected: [...tooltipSelectedFilters],\n value,\n },\n };\n\n setSelectedFilters(newSelectedFilters);\n onFiltersUpdated && onFiltersUpdated(newSelectedFilters);\n };\n\n const removeOneSelectedFilter = (\n availableFilters: Filters<T>,\n filter: string,\n ): void => {\n const filterToDelete = availableFilters.find(({ id }) => id === filter);\n\n if (filterToDelete) {\n updateSelectedFilters(\n filterToDelete.field,\n (selectedFilters[filterToDelete.field] || {}).selected?.filter(\n (f) => f !== filter,\n ),\n );\n }\n };\n\n const removeAllSelectedFilters = (availableFilters: Filters<T>): void => {\n const initialSelectedFilters =\n getSelectedFiltersInitialState(availableFilters);\n setSelectedFilters(initialSelectedFilters);\n onFiltersUpdated && onFiltersUpdated(initialSelectedFilters);\n };\n\n return {\n selectedFilters,\n updateSelectedFilters,\n removeOneSelectedFilter,\n removeAllSelectedFilters,\n };\n};\n"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import _toConsumableArray from"@babel/runtime/helpers/toConsumableArray";import _slicedToArray from"@babel/runtime/helpers/slicedToArray";import _defineProperty from"@babel/runtime/helpers/defineProperty";function ownKeys(a,b){var c=Object.keys(a);if(Object.getOwnPropertySymbols){var d=Object.getOwnPropertySymbols(a);b&&(d=d.filter(function(b){return Object.getOwnPropertyDescriptor(a,b).enumerable})),c.push.apply(c,d)}return c}function _objectSpread(a){for(var b,c=1;c<arguments.length;c++)b=null==arguments[c]?{}:arguments[c],c%2?ownKeys(Object(b),!0).forEach(function(c){_defineProperty(a,c,b[c])}):Object.getOwnPropertyDescriptors?Object.defineProperties(a,Object.getOwnPropertyDescriptors(b)):ownKeys(Object(b)).forEach(function(c){Object.defineProperty(a,c,Object.getOwnPropertyDescriptor(b,c))});return a}import React from"react";import{isNotNil,isNumber,isString}from"../../utils/type-guards";export var Order={ASC:"ASC",asc:"asc",DESC:"DESC",desc:"desc"};export var getColumnsSize=function(a){return a.map(function(a){return isNumber(a)?"".concat(a,"px"):"auto"}).join(" ")};export var getColumnLeftOffset=function(a){var b=a.columnIndex,c=a.resizedColumnWidths,d=a.initialColumnWidths,e=d.slice(0,b).map(function(a,b){return c[b]||a});return e.reduce(function(a,b){return a+b},0)};export var createSortingState=function(a,b,c){return isString(b)?{by:a,order:b.toLowerCase(),sortFn:c}:null};export var getNewSorting=function(a,b,c){return a&&a.by===b?"asc"===a.order?{by:b,order:"desc",sortFn:c}:null:{by:b,order:"asc",sortFn:c}};export var getMaxLevel=function(a){var b=0,c=function(a){var d=1<arguments.length&&void 0!==arguments[1]?arguments[1]:1;d>b&&(b=d),a.forEach(function(a){a.columns&&c(a.columns,d+1)})};return c(a),b};var getLastChildrenCount=function(a){var b=0,c=function(a){a.forEach(function(a){a.columns?c(a.columns):b++})};return c(a),b};export var transformColumns=function(a,b){for(var c=[{columns:a,index:0}],d=[],e=0;c.length;){var f=c.length-1,g=c[f],h=g.columns[g.index];h?function(){
|
|
1
|
+
import _toConsumableArray from"@babel/runtime/helpers/toConsumableArray";import _slicedToArray from"@babel/runtime/helpers/slicedToArray";import _defineProperty from"@babel/runtime/helpers/defineProperty";function ownKeys(a,b){var c=Object.keys(a);if(Object.getOwnPropertySymbols){var d=Object.getOwnPropertySymbols(a);b&&(d=d.filter(function(b){return Object.getOwnPropertyDescriptor(a,b).enumerable})),c.push.apply(c,d)}return c}function _objectSpread(a){for(var b,c=1;c<arguments.length;c++)b=null==arguments[c]?{}:arguments[c],c%2?ownKeys(Object(b),!0).forEach(function(c){_defineProperty(a,c,b[c])}):Object.getOwnPropertyDescriptors?Object.defineProperties(a,Object.getOwnPropertyDescriptors(b)):ownKeys(Object(b)).forEach(function(c){Object.defineProperty(a,c,Object.getOwnPropertyDescriptor(b,c))});return a}import React from"react";import{isNotNil,isNumber,isString}from"../../utils/type-guards";export var Order={ASC:"ASC",asc:"asc",DESC:"DESC",desc:"desc"};export var getColumnsSize=function(a){return a.map(function(a){return isNumber(a)?"".concat(a,"px"):"auto"}).join(" ")};export var getColumnLeftOffset=function(a){var b=a.columnIndex,c=a.resizedColumnWidths,d=a.initialColumnWidths,e=d.slice(0,b).map(function(a,b){return c[b]||a});return e.reduce(function(a,b){return a+b},0)};export var createSortingState=function(a,b,c){return isString(b)?{by:a,order:b.toLowerCase(),sortFn:c}:null};export var getNewSorting=function(a,b,c){return a&&a.by===b?"asc"===a.order?{by:b,order:"desc",sortFn:c}:null:{by:b,order:"asc",sortFn:c}};export var getMaxLevel=function(a){var b=0,c=function(a){var d=1<arguments.length&&void 0!==arguments[1]?arguments[1]:1;d>b&&(b=d),a.forEach(function(a){a.columns&&c(a.columns,d+1)})};return c(a),b};var getLastChildrenCount=function(a){var b=0,c=function(a){a.forEach(function(a){a.columns?c(a.columns):b++})};return c(a),b};export var transformColumns=function(a,b){for(var c=[{columns:a,index:0}],d=[],e=0;c.length;){var f=c.length-1,g=c[f],h=g.columns[g.index];h?function(a){d[f]||(d[f]=[]);var i=c[0].index,j=d[f][d[f].length-1],k=j?j.position.gridIndex+(j.position.colSpan||1):0,l=0===f?e++:null!==(a=h.colId)&&void 0!==a?a:0,m=_objectSpread(_objectSpread({},h),{},{position:{topHeaderGridIndex:i,gridIndex:k,level:f}});0===f&&(m.colId=l),m.columns?(m.position.colSpan=getLastChildrenCount(m.columns),d[f].push(m),c.push({columns:m.columns.map(function(a){return _objectSpread(_objectSpread({},a),{},{colId:e++,parentId:l})}),index:0})):(m.position.rowSpan=b-f,d[f].push(m),g.index++)}():(c.pop(),c[c.length-1]&&c[c.length-1].index++)}return d};var getIsFirst=function(a,b){var c,d,e=b.colId,f=b.parentId,g=b.position,h=b.accessor;if(0===g.level)return 0===e;var i=a.find(function(a){return a.colId===f});return!!((null===i||void 0===i||null===(c=i.columns)||void 0===c||null===(d=c[0])||void 0===d?void 0:d.accessor)===h&&!!i&&getIsFirst(a,i))};export var useHeaderData=function(a){var b=React.useRef({}),c=transformColumns(a,getMaxLevel(a)),d=Object.values(b.current).filter(isNotNil).map(function(a){return a.getBoundingClientRect().height}),e=c.flat().filter(function(a){return!a.hidden}).map(function(a,b,e){return _objectSpread(_objectSpread({},a),{},{position:_objectSpread(_objectSpread({},a.position),{},{isFirst:getIsFirst(e,a),smallTextSize:1<c.length&&a.position.level===c.length-1,height:d[b]||0})})}),f=c.map(function(a,b){return Math.min.apply(null,e.filter(function(a){return a.position.level===b}).map(function(a){return a.position.height}))}),g=e.filter(function(a){var b=a.position.colSpan;return!b}).sort(function(c,a){return c.position.topHeaderGridIndex===a.position.topHeaderGridIndex?c.position.gridIndex>a.position.gridIndex?1:-1:c.position.topHeaderGridIndex>a.position.topHeaderGridIndex?1:-1}),h=g.map(function(a,b){var c,d,e=f.reduce(function(c,a){return c+a},0);return(a.position.rowSpan||0)>=((null===(c=g[b+1])||void 0===c?void 0:c.position.rowSpan)||0)?e-(a.position.height||0):e-(null===(d=g[b+1])||void 0===d?void 0:d.position.height)||0});return{headers:c,flattenedHeaders:e,lowHeaders:g,headerRowsRefs:b,headerRowsHeights:f,headerColumnsHeights:d,resizerTopOffsets:h}};export var useLazyLoadData=function(a,b,c){var d=React.useState(0),e=_slicedToArray(d,2),f=e[0],g=e[1],h=React.useRef(null),i=React.useRef(null),j=Math.floor(a/3);React.useEffect(function(){if(c){var a=0;b&&"offsetHeight"in b?a=b.offsetHeight:b&&"outerHeight"in b&&(a=b.outerHeight);var d=function(){i.current&&a/2>i.current.getBoundingClientRect().top?g(function(a){return a+j}):h.current&&h.current.getBoundingClientRect().top>a/2&&g(function(a){return 0>a-j?0:a-j})};return null===b||void 0===b?void 0:b.addEventListener("scroll",d),function(){return null===b||void 0===b?void 0:b.removeEventListener("scroll",d)}}},[f,b]);return{getSlicedRows:function getSlicedRows(b){return!c||b.length<a?b:b.slice(f,f+a)},setBoundaryRef:function setBoundaryRef(b,d){return c&&0===b&&d===j&&0<f?h:c&&0===b&&d===a-j?i:void 0}}};export var transformRows=function(a,b,c){for(var d=[{rows:a,index:0}],e=[];d.length;){var f=d.length-1,g=d[f],h=g.rows[g.index];if(h){var i=_objectSpread(_objectSpread({},h),{},{options:{level:f},rows:h.rows&&_toConsumableArray(h.rows)}),j=!!i.rows&&(c||b.includes(i.id));j?d.push({rows:i.rows,index:0}):g.index++,e.push(i)}else d.pop(),d[d.length-1]&&d[d.length-1].index++}return e};export function getMergedArray(a,b){for(var c=Math.max(a.length,b.length),d=[],e=0;e<c;e++){var f;d.push(null!==(f=b[e])&&void 0!==f?f:a[e])}return d}export function calulateColSpans(a,b){var c=[],d=0,e=a.length,f=function(a,b){return b+a>e?e-b-a:a};return a.forEach(function(a){var e=a.colSpan,g=1<c.length?c.reduce(function(c,a){return c+a}):0;if("number"==typeof e||"function"==typeof e){var h="number"==typeof e?e:e(b);0===d?c.push(f(h,g)):c.push(f(h-d||0,g)),d=0<h-d?h-1:d-h}else 0===d?c.push(f(1,g)):(c.push(0),d--)}),c}
|
|
2
2
|
//# sourceMappingURL=helpers.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"helpers.js","names":["React","isNotNil","isNumber","isString","Order","ASC","asc","DESC","desc","getColumnsSize","sizes","map","s","join","getColumnLeftOffset","columnIndex","resizedColumnWidths","initialColumnWidths","selectedColumns","slice","size","index","reduce","acc","column","createSortingState","by","order","sortFn","toLowerCase","getNewSorting","currentSorting","newField","getMaxLevel","columns","count","traverse","cols","level","forEach","item","getLastChildrenCount","transformColumns","maxLevel","stack","headersArr","col","length","node","topHeaderGridIndex","prevItem","gridIndex","position","colSpan","mainId","colId","handledItem","push","el","parentId","rowSpan","pop","getIsFirst","accessor","parent","find","useHeaderData","headerRowsRefs","useRef","headers","headerColumnsHeights","Object","values","current","filter","ref","getBoundingClientRect","height","flattenedHeaders","flat","hidden","array","isFirst","smallTextSize","headerRowsHeights","arr","Math","min","apply","lowHeaders","sort","a","b","resizerTopOffsets","header","headerHeight","useLazyLoadData","maxVisibleRows","scrollableEl","enabled","useState","visibleStartIndex","setVisibleStartIndex","cellsRefStart","cellsRefEnd","additionalRowsCount","floor","useEffect","elHeight","offsetHeight","outerHeight","onScrollListener","top","prevIndex","addEventListener","removeEventListener","getSlicedRows","rows","setBoundaryRef","columnIdx","rowIdx","transformRows","expandedRowIds","isTableExpanded","rowsArr","options","needGoDeeper","includes","id","getMergedArray","mainArr","mergeArr","max","resultArr","i","calulateColSpans","row","spans","counter","getAvailableSpan","span"],"sources":["../../../../../src/components/Table/helpers.ts"],"sourcesContent":["import React from 'react';\n\nimport { isNotNil, isNumber, isString } from '../../utils/type-guards';\nimport {\n ColumnWidth,\n SortingState,\n TableColumn,\n TableRow,\n TableTreeRow,\n} from './Table';\n\nexport const Order = {\n ASC: 'ASC',\n asc: 'asc',\n DESC: 'DESC',\n desc: 'desc',\n} as const;\n\nexport type OrderType = typeof Order[keyof typeof Order];\n\nexport type Position = {\n colSpan?: number;\n rowSpan?: number;\n level: number;\n gridIndex: number;\n isFirst?: boolean;\n topHeaderGridIndex: number;\n smallTextSize?: boolean;\n height?: number;\n};\n\nexport type Header<T extends TableRow> = TableColumn<T> & {\n position: Position;\n colId?: number;\n parentId?: number;\n};\n\nexport type HeaderData<T extends TableRow> = {\n headers: Array<Header<T>>[];\n flattenedHeaders: Array<Header<T>>;\n lowHeaders: Array<Header<T>>;\n headerRowsRefs: React.MutableRefObject<Record<number, HTMLDivElement | null>>;\n headerRowsHeights: Array<number>;\n headerColumnsHeights: Array<number>;\n resizerTopOffsets: Array<number>;\n};\n\nexport const getColumnsSize = (sizes: ColumnWidth[]): string => {\n return sizes.map((s) => (isNumber(s) ? `${s}px` : `auto`)).join(' ');\n};\n\nexport const getColumnLeftOffset = ({\n columnIndex,\n resizedColumnWidths,\n initialColumnWidths,\n}: {\n columnIndex: number;\n resizedColumnWidths: Array<number | undefined>;\n initialColumnWidths: number[];\n}): number => {\n const selectedColumns = initialColumnWidths\n .slice(0, columnIndex)\n .map((size, index) => resizedColumnWidths[index] || size);\n\n return selectedColumns.reduce((acc, column) => acc + column, 0);\n};\n\nexport const createSortingState = <T extends TableRow>(\n by: keyof T,\n order?: OrderType,\n sortFn?: (a: T[keyof T], b: T[keyof T]) => number,\n): SortingState<T> => {\n if (!isString(order)) {\n return null;\n }\n\n return { by, order: order.toLowerCase(), sortFn } as SortingState<T>;\n};\n\nexport const getNewSorting = <T extends TableRow>(\n currentSorting: SortingState<T>,\n newField: keyof T,\n sortFn?: (a: T[keyof T], b: T[keyof T]) => number,\n): SortingState<T> => {\n if (!currentSorting || currentSorting.by !== newField) {\n return {\n by: newField,\n order: 'asc',\n sortFn,\n };\n }\n\n if (currentSorting.order === 'asc') {\n return {\n by: newField,\n order: 'desc',\n sortFn,\n };\n }\n\n return null;\n};\n\nexport const getMaxLevel = <T extends TableRow>(\n columns: Array<TableColumn<T>>,\n) => {\n let count = 0;\n\n const traverse = (cols: Array<TableColumn<T>>, level = 1) => {\n if (level > count) count = level;\n cols.forEach((item: TableColumn<T>) => {\n if (item.columns) {\n traverse(item.columns, level + 1);\n }\n });\n };\n\n traverse(columns);\n\n return count;\n};\n\nconst getLastChildrenCount = <T extends TableRow>(\n columns: Array<TableColumn<T>>,\n) => {\n let count = 0;\n\n const traverse = (cols: Array<TableColumn<T>>) => {\n cols.forEach((item: TableColumn<T>) => {\n if (item.columns) {\n traverse(item.columns);\n } else {\n count++;\n }\n });\n };\n\n traverse(columns);\n\n return count;\n};\n\nexport const transformColumns = <T extends TableRow>(\n columns: Array<TableColumn<T>>,\n maxLevel: number,\n): Array<Header<T>>[] => {\n const stack = [{ columns, index: 0 }];\n const headersArr: Array<Header<T>>[] = [];\n let col = 0;\n\n while (stack.length) {\n const level = stack.length - 1;\n const node = stack[level];\n const item = node.columns[node.index] as Header<T>;\n\n if (item) {\n if (!headersArr[level]) headersArr[level] = [];\n const topHeaderGridIndex = stack[0].index;\n const prevItem = headersArr[level][headersArr[level].length - 1];\n const gridIndex = prevItem\n ? prevItem.position.gridIndex + (prevItem.position.colSpan || 1)\n : 0;\n const mainId = level === 0 ? col++ : item.colId ?? 0;\n\n const handledItem: TableColumn<T> & {\n position: Position;\n colId?: number;\n parentId?: number;\n } = {\n ...item,\n position: {\n topHeaderGridIndex,\n gridIndex,\n level,\n },\n };\n\n if (level === 0) {\n handledItem.colId = mainId;\n }\n\n if (!handledItem.columns) {\n handledItem.position.rowSpan = maxLevel - level;\n headersArr[level].push(handledItem);\n node.index++;\n } else {\n handledItem.position.colSpan = getLastChildrenCount(\n handledItem.columns,\n );\n headersArr[level].push(handledItem);\n stack.push({\n columns: handledItem.columns.map((el) => ({\n ...el,\n colId: col++,\n parentId: mainId,\n })),\n index: 0,\n });\n }\n } else {\n stack.pop();\n if (stack[stack.length - 1]) stack[stack.length - 1].index++;\n }\n }\n\n return headersArr;\n};\n\nconst getIsFirst = <T extends TableRow>(\n columns: Header<T>[],\n column: Header<T>,\n): boolean => {\n const { colId, parentId, position, accessor } = column;\n if (position.level === 0) {\n return colId === 0;\n }\n const parent = columns.find((el) => el.colId === parentId);\n return !!(\n parent?.columns?.[0]?.accessor === accessor &&\n (parent ? getIsFirst(columns, parent) : false)\n );\n};\n\n/**\n * Возвращает данные, необходимые для построения хидера таблицы\n *\n * @param columns - массив колонок\n *\n * @return {\n * {Array<Header<T>>[]} headers: двумерный массив заголовков, выстроенный по вертикали;\n * {Array<Header<T>>} flattenedHeaders: плоский массив заголовков;\n * {Array<Header<T>>} lowHeaders: самые нижние заголовки (по ним строятся колонки);\n * {Record<number, HTMLDivElement | null>} headerRowsRefs: содержит рефы на заголовки;\n * {Array<number>} headerRowsHeights: массив высот строк заголовков;\n * {Array<number>} headerColumnsHeights: массив высот колонок заголовков;\n * {Array<number>} resizerTopOffsets: массив отступов для компонентов Resizer;\n * }\n */\nexport const useHeaderData = <T extends TableRow>(\n columns: Array<TableColumn<T>>,\n): HeaderData<T> => {\n const headerRowsRefs = React.useRef<Record<number, HTMLDivElement | null>>(\n {},\n );\n const headers = transformColumns(columns, getMaxLevel(columns));\n const headerColumnsHeights: Array<number> = Object.values(\n headerRowsRefs.current,\n )\n .filter(isNotNil)\n .map((ref) => ref.getBoundingClientRect().height);\n\n const flattenedHeaders = headers\n .flat()\n .filter((column: TableColumn<T>) => !column.hidden)\n .map((column, index, array) => ({\n ...column,\n position: {\n ...column.position,\n isFirst: getIsFirst(array, column),\n smallTextSize:\n headers.length > 1 && column.position.level === headers.length - 1,\n height: headerColumnsHeights[index] || 0,\n },\n }));\n const headerRowsHeights = headers.map((arr, index) => {\n return Math.min.apply(\n null,\n flattenedHeaders\n .filter(\n (col: TableColumn<T> & { position: Position }) =>\n col.position.level === index,\n )\n .map((item) => item.position.height),\n );\n });\n const lowHeaders = flattenedHeaders\n .filter(\n ({ position: { colSpan } }: TableColumn<T> & { position: Position }) =>\n !colSpan,\n )\n .sort((a, b) => {\n if (a.position.topHeaderGridIndex !== b.position.topHeaderGridIndex) {\n return a.position.topHeaderGridIndex > b.position.topHeaderGridIndex\n ? 1\n : -1;\n }\n return a.position.gridIndex > b.position.gridIndex ? 1 : -1;\n });\n\n const resizerTopOffsets = lowHeaders.map(\n (header: TableColumn<T> & { position: Position }, index: number) => {\n const headerHeight = headerRowsHeights.reduce(\n (a: number, b: number) => a + b,\n 0,\n );\n if (\n (header.position.rowSpan || 0) >=\n (lowHeaders[index + 1]?.position.rowSpan || 0)\n ) {\n return headerHeight - (header.position.height || 0);\n }\n // eslint-disable-next-line no-unsafe-optional-chaining\n return headerHeight - lowHeaders[index + 1]?.position.height! || 0;\n },\n );\n\n return {\n headers,\n flattenedHeaders,\n lowHeaders,\n headerRowsRefs,\n headerRowsHeights,\n headerColumnsHeights,\n resizerTopOffsets,\n };\n};\n\n/**\n * Возвращает 2 функции, необходимые для отображения большого количества строк в таблице\n *\n * @param maxVisibleRows - максимальное количество отображаемых строк в один момент времени\n * @param scrollableEl - элемент, на который вешается scroll listener\n * @param enabled - флаг включения данной функциональность\n *\n * @return {\n * getSlicedRows: функция, обрезающая исходный массив данных\n * setBoundaryRef: функция, проставляющая рефы необходимым ячейкам для вычисления границ отображения строк\n * }\n */\nexport const useLazyLoadData = (\n maxVisibleRows: number,\n scrollableEl: HTMLDivElement | Window | null,\n enabled: boolean,\n) => {\n const [visibleStartIndex, setVisibleStartIndex] = React.useState<number>(0);\n const cellsRefStart = React.useRef<HTMLDivElement>(null);\n const cellsRefEnd = React.useRef<HTMLDivElement>(null);\n const additionalRowsCount = Math.floor(maxVisibleRows / 3);\n\n React.useEffect(() => {\n if (!enabled) return;\n let elHeight = 0;\n if (scrollableEl && 'offsetHeight' in scrollableEl) {\n elHeight = scrollableEl.offsetHeight;\n } else if (scrollableEl && 'outerHeight' in scrollableEl) {\n elHeight = scrollableEl.outerHeight;\n }\n const onScrollListener = () => {\n if (\n cellsRefEnd.current &&\n elHeight / 2 > cellsRefEnd.current.getBoundingClientRect().top\n ) {\n setVisibleStartIndex((prevIndex) => prevIndex + additionalRowsCount);\n } else if (\n cellsRefStart.current &&\n cellsRefStart.current.getBoundingClientRect().top > elHeight / 2\n ) {\n setVisibleStartIndex((prevIndex) =>\n prevIndex - additionalRowsCount < 0\n ? 0\n : prevIndex - additionalRowsCount,\n );\n }\n };\n\n scrollableEl?.addEventListener('scroll', onScrollListener);\n\n return () => scrollableEl?.removeEventListener('scroll', onScrollListener);\n }, [visibleStartIndex, scrollableEl]);\n\n const setBoundaryRef = (columnIdx: number, rowIdx: number) => {\n if (\n enabled &&\n columnIdx === 0 &&\n rowIdx === additionalRowsCount &&\n visibleStartIndex > 0\n ) {\n return cellsRefStart;\n }\n if (\n enabled &&\n columnIdx === 0 &&\n rowIdx === maxVisibleRows - additionalRowsCount\n ) {\n return cellsRefEnd;\n }\n return undefined;\n };\n\n const getSlicedRows = <T extends TableRow>(rows: T[]) =>\n !enabled || rows.length < maxVisibleRows\n ? rows\n : rows.slice(visibleStartIndex, visibleStartIndex + maxVisibleRows);\n\n return {\n getSlicedRows,\n setBoundaryRef,\n };\n};\n\nexport const transformRows = <T extends TableRow>(\n rows: T[],\n expandedRowIds: string[],\n isTableExpanded?: boolean,\n): TableTreeRow<T>[] => {\n const stack = [{ rows, index: 0 }];\n const rowsArr: TableTreeRow<T>[] = [];\n while (stack.length) {\n const level = stack.length - 1;\n const node = stack[level];\n const item: T = node.rows[node.index];\n\n if (item) {\n const handledItem: TableTreeRow<T> = {\n ...item,\n options: { level },\n rows: item.rows && [...item.rows],\n };\n\n const needGoDeeper =\n Boolean(handledItem.rows) &&\n (isTableExpanded || expandedRowIds.includes(handledItem.id));\n\n if (needGoDeeper) {\n stack.push({ rows: handledItem.rows as T[], index: 0 });\n } else {\n node.index++;\n }\n\n rowsArr.push(handledItem);\n } else {\n stack.pop();\n if (stack[stack.length - 1]) {\n stack[stack.length - 1].index++;\n }\n }\n }\n return rowsArr;\n};\n\nexport function getMergedArray<TYPE>(mainArr: TYPE[], mergeArr: TYPE[]) {\n const length = Math.max(mainArr.length, mergeArr.length);\n const resultArr: TYPE[] = [];\n for (let i = 0; i < length; i++) {\n resultArr.push(mergeArr[i] ?? mainArr[i]);\n }\n return resultArr;\n}\n\nexport function calulateColSpans<T extends TableRow>(\n columns: TableColumn<T>[],\n row: TableTreeRow<T>,\n) {\n const spans: number[] = [];\n let counter = 0;\n const { length } = columns;\n const getAvailableSpan = (span: number, size: number) => {\n if (size + span > length) return length - size - span;\n return span;\n };\n columns.forEach((column) => {\n const { colSpan } = column;\n const size = spans.length > 1 ? spans.reduce((a, b) => a + b) : 0;\n if (typeof colSpan === 'number' || typeof colSpan === 'function') {\n const span = typeof colSpan === 'number' ? colSpan : colSpan(row);\n if (counter === 0) {\n spans.push(getAvailableSpan(span, size));\n } else {\n spans.push(getAvailableSpan(span - counter || 0, size));\n }\n counter = span - counter > 0 ? span - 1 : counter - span;\n } else if (counter !== 0) {\n spans.push(0);\n counter--;\n } else {\n spans.push(getAvailableSpan(1, size));\n }\n });\n return spans;\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"helpers.js","names":["React","isNotNil","isNumber","isString","Order","ASC","asc","DESC","desc","getColumnsSize","sizes","map","s","join","getColumnLeftOffset","columnIndex","resizedColumnWidths","initialColumnWidths","selectedColumns","slice","size","index","reduce","acc","column","createSortingState","by","order","sortFn","toLowerCase","getNewSorting","currentSorting","newField","getMaxLevel","columns","count","traverse","cols","level","forEach","item","getLastChildrenCount","transformColumns","maxLevel","stack","headersArr","col","length","node","topHeaderGridIndex","prevItem","gridIndex","position","colSpan","mainId","colId","handledItem","push","el","parentId","rowSpan","pop","getIsFirst","accessor","parent","find","useHeaderData","headerRowsRefs","useRef","headers","headerColumnsHeights","Object","values","current","filter","ref","getBoundingClientRect","height","flattenedHeaders","flat","hidden","array","isFirst","smallTextSize","headerRowsHeights","arr","Math","min","apply","lowHeaders","sort","a","b","resizerTopOffsets","header","headerHeight","useLazyLoadData","maxVisibleRows","scrollableEl","enabled","useState","visibleStartIndex","setVisibleStartIndex","cellsRefStart","cellsRefEnd","additionalRowsCount","floor","useEffect","elHeight","offsetHeight","outerHeight","onScrollListener","top","prevIndex","addEventListener","removeEventListener","getSlicedRows","rows","setBoundaryRef","columnIdx","rowIdx","transformRows","expandedRowIds","isTableExpanded","rowsArr","options","needGoDeeper","includes","id","getMergedArray","mainArr","mergeArr","max","resultArr","i","calulateColSpans","row","spans","counter","getAvailableSpan","span"],"sources":["../../../../../src/components/Table/helpers.ts"],"sourcesContent":["import React from 'react';\n\nimport { isNotNil, isNumber, isString } from '../../utils/type-guards';\nimport {\n ColumnWidth,\n SortingState,\n TableColumn,\n TableRow,\n TableTreeRow,\n} from './Table';\n\nexport const Order = {\n ASC: 'ASC',\n asc: 'asc',\n DESC: 'DESC',\n desc: 'desc',\n} as const;\n\nexport type OrderType = typeof Order[keyof typeof Order];\n\nexport type Position = {\n colSpan?: number;\n rowSpan?: number;\n level: number;\n gridIndex: number;\n isFirst?: boolean;\n topHeaderGridIndex: number;\n smallTextSize?: boolean;\n height?: number;\n};\n\nexport type Header<T extends TableRow> = TableColumn<T> & {\n position: Position;\n colId?: number;\n parentId?: number;\n};\n\nexport type HeaderData<T extends TableRow> = {\n headers: Array<Header<T>>[];\n flattenedHeaders: Array<Header<T>>;\n lowHeaders: Array<Header<T>>;\n headerRowsRefs: React.MutableRefObject<Record<number, HTMLDivElement | null>>;\n headerRowsHeights: Array<number>;\n headerColumnsHeights: Array<number>;\n resizerTopOffsets: Array<number>;\n};\n\nexport const getColumnsSize = (sizes: ColumnWidth[]): string => {\n return sizes.map((s) => (isNumber(s) ? `${s}px` : `auto`)).join(' ');\n};\n\nexport const getColumnLeftOffset = ({\n columnIndex,\n resizedColumnWidths,\n initialColumnWidths,\n}: {\n columnIndex: number;\n resizedColumnWidths: Array<number | undefined>;\n initialColumnWidths: number[];\n}): number => {\n const selectedColumns = initialColumnWidths\n .slice(0, columnIndex)\n .map((size, index) => resizedColumnWidths[index] || size);\n\n return selectedColumns.reduce((acc, column) => acc + column, 0);\n};\n\nexport const createSortingState = <T extends TableRow>(\n by: keyof T,\n order?: OrderType,\n sortFn?: (a: T[keyof T], b: T[keyof T]) => number,\n): SortingState<T> => {\n if (!isString(order)) {\n return null;\n }\n\n return { by, order: order.toLowerCase(), sortFn } as SortingState<T>;\n};\n\nexport const getNewSorting = <T extends TableRow>(\n currentSorting: SortingState<T>,\n newField: keyof T,\n sortFn?: (a: T[keyof T], b: T[keyof T]) => number,\n): SortingState<T> => {\n if (!currentSorting || currentSorting.by !== newField) {\n return {\n by: newField,\n order: 'asc',\n sortFn,\n };\n }\n\n if (currentSorting.order === 'asc') {\n return {\n by: newField,\n order: 'desc',\n sortFn,\n };\n }\n\n return null;\n};\n\nexport const getMaxLevel = <T extends TableRow>(\n columns: Array<TableColumn<T>>,\n) => {\n let count = 0;\n\n const traverse = (cols: Array<TableColumn<T>>, level = 1) => {\n if (level > count) count = level;\n cols.forEach((item: TableColumn<T>) => {\n if (item.columns) {\n traverse(item.columns, level + 1);\n }\n });\n };\n\n traverse(columns);\n\n return count;\n};\n\nconst getLastChildrenCount = <T extends TableRow>(\n columns: Array<TableColumn<T>>,\n) => {\n let count = 0;\n\n const traverse = (cols: Array<TableColumn<T>>) => {\n cols.forEach((item: TableColumn<T>) => {\n if (item.columns) {\n traverse(item.columns);\n } else {\n count++;\n }\n });\n };\n\n traverse(columns);\n\n return count;\n};\n\nexport const transformColumns = <T extends TableRow>(\n columns: Array<TableColumn<T>>,\n maxLevel: number,\n): Array<Header<T>>[] => {\n const stack = [{ columns, index: 0 }];\n const headersArr: Array<Header<T>>[] = [];\n let col = 0;\n\n while (stack.length) {\n const level = stack.length - 1;\n const node = stack[level];\n const item = node.columns[node.index] as Header<T>;\n\n if (item) {\n if (!headersArr[level]) headersArr[level] = [];\n const topHeaderGridIndex = stack[0].index;\n const prevItem = headersArr[level][headersArr[level].length - 1];\n const gridIndex = prevItem\n ? prevItem.position.gridIndex + (prevItem.position.colSpan || 1)\n : 0;\n const mainId = level === 0 ? col++ : item.colId ?? 0;\n\n const handledItem: TableColumn<T> & {\n position: Position;\n colId?: number;\n parentId?: number;\n } = {\n ...item,\n position: {\n topHeaderGridIndex,\n gridIndex,\n level,\n },\n };\n\n if (level === 0) {\n handledItem.colId = mainId;\n }\n\n if (!handledItem.columns) {\n handledItem.position.rowSpan = maxLevel - level;\n headersArr[level].push(handledItem);\n node.index++;\n } else {\n handledItem.position.colSpan = getLastChildrenCount(\n handledItem.columns,\n );\n headersArr[level].push(handledItem);\n stack.push({\n columns: handledItem.columns.map((el) => ({\n ...el,\n colId: col++,\n parentId: mainId,\n })),\n index: 0,\n });\n }\n } else {\n stack.pop();\n if (stack[stack.length - 1]) stack[stack.length - 1].index++;\n }\n }\n\n return headersArr;\n};\n\nconst getIsFirst = <T extends TableRow>(\n columns: Header<T>[],\n column: Header<T>,\n): boolean => {\n const { colId, parentId, position, accessor } = column;\n if (position.level === 0) {\n return colId === 0;\n }\n const parent = columns.find((el) => el.colId === parentId);\n return !!(\n parent?.columns?.[0]?.accessor === accessor &&\n (parent ? getIsFirst(columns, parent) : false)\n );\n};\n\n/**\n * Возвращает данные, необходимые для построения хидера таблицы\n *\n * @param columns - массив колонок\n *\n * @return {\n * {Array<Header<T>>[]} headers: двумерный массив заголовков, выстроенный по вертикали;\n * {Array<Header<T>>} flattenedHeaders: плоский массив заголовков;\n * {Array<Header<T>>} lowHeaders: самые нижние заголовки (по ним строятся колонки);\n * {Record<number, HTMLDivElement | null>} headerRowsRefs: содержит рефы на заголовки;\n * {Array<number>} headerRowsHeights: массив высот строк заголовков;\n * {Array<number>} headerColumnsHeights: массив высот колонок заголовков;\n * {Array<number>} resizerTopOffsets: массив отступов для компонентов Resizer;\n * }\n */\nexport const useHeaderData = <T extends TableRow>(\n columns: Array<TableColumn<T>>,\n): HeaderData<T> => {\n const headerRowsRefs = React.useRef<Record<number, HTMLDivElement | null>>(\n {},\n );\n const headers = transformColumns(columns, getMaxLevel(columns));\n const headerColumnsHeights: Array<number> = Object.values(\n headerRowsRefs.current,\n )\n .filter(isNotNil)\n .map((ref) => ref.getBoundingClientRect().height);\n\n const flattenedHeaders = headers\n .flat()\n .filter((column: TableColumn<T>) => !column.hidden)\n .map((column, index, array) => ({\n ...column,\n position: {\n ...column.position,\n isFirst: getIsFirst(array, column),\n smallTextSize:\n headers.length > 1 && column.position.level === headers.length - 1,\n height: headerColumnsHeights[index] || 0,\n },\n }));\n const headerRowsHeights = headers.map((arr, index) => {\n return Math.min.apply(\n null,\n flattenedHeaders\n .filter(\n (col: TableColumn<T> & { position: Position }) =>\n col.position.level === index,\n )\n .map((item) => item.position.height),\n );\n });\n const lowHeaders = flattenedHeaders\n .filter(\n ({ position: { colSpan } }: TableColumn<T> & { position: Position }) =>\n !colSpan,\n )\n .sort((a, b) => {\n if (a.position.topHeaderGridIndex !== b.position.topHeaderGridIndex) {\n return a.position.topHeaderGridIndex > b.position.topHeaderGridIndex\n ? 1\n : -1;\n }\n return a.position.gridIndex > b.position.gridIndex ? 1 : -1;\n });\n\n const resizerTopOffsets = lowHeaders.map(\n (header: TableColumn<T> & { position: Position }, index: number) => {\n const headerHeight = headerRowsHeights.reduce(\n (a: number, b: number) => a + b,\n 0,\n );\n if (\n (header.position.rowSpan || 0) >=\n (lowHeaders[index + 1]?.position.rowSpan || 0)\n ) {\n return headerHeight - (header.position.height || 0);\n }\n // eslint-disable-next-line no-unsafe-optional-chaining\n return headerHeight - lowHeaders[index + 1]?.position.height! || 0;\n },\n );\n\n return {\n headers,\n flattenedHeaders,\n lowHeaders,\n headerRowsRefs,\n headerRowsHeights,\n headerColumnsHeights,\n resizerTopOffsets,\n };\n};\n\n/**\n * Возвращает 2 функции, необходимые для отображения большого количества строк в таблице\n *\n * @param maxVisibleRows - максимальное количество отображаемых строк в один момент времени\n * @param scrollableEl - элемент, на который вешается scroll listener\n * @param enabled - флаг включения данной функциональность\n *\n * @return {\n * getSlicedRows: функция, обрезающая исходный массив данных\n * setBoundaryRef: функция, проставляющая рефы необходимым ячейкам для вычисления границ отображения строк\n * }\n */\nexport const useLazyLoadData = (\n maxVisibleRows: number,\n scrollableEl: HTMLDivElement | Window | null,\n enabled: boolean,\n) => {\n const [visibleStartIndex, setVisibleStartIndex] = React.useState<number>(0);\n const cellsRefStart = React.useRef<HTMLDivElement>(null);\n const cellsRefEnd = React.useRef<HTMLDivElement>(null);\n const additionalRowsCount = Math.floor(maxVisibleRows / 3);\n\n React.useEffect(() => {\n if (!enabled) return;\n let elHeight = 0;\n if (scrollableEl && 'offsetHeight' in scrollableEl) {\n elHeight = scrollableEl.offsetHeight;\n } else if (scrollableEl && 'outerHeight' in scrollableEl) {\n elHeight = scrollableEl.outerHeight;\n }\n const onScrollListener = () => {\n if (\n cellsRefEnd.current &&\n elHeight / 2 > cellsRefEnd.current.getBoundingClientRect().top\n ) {\n setVisibleStartIndex((prevIndex) => prevIndex + additionalRowsCount);\n } else if (\n cellsRefStart.current &&\n cellsRefStart.current.getBoundingClientRect().top > elHeight / 2\n ) {\n setVisibleStartIndex((prevIndex) =>\n prevIndex - additionalRowsCount < 0\n ? 0\n : prevIndex - additionalRowsCount,\n );\n }\n };\n\n scrollableEl?.addEventListener('scroll', onScrollListener);\n\n return () => scrollableEl?.removeEventListener('scroll', onScrollListener);\n }, [visibleStartIndex, scrollableEl]);\n\n const setBoundaryRef = (columnIdx: number, rowIdx: number) => {\n if (\n enabled &&\n columnIdx === 0 &&\n rowIdx === additionalRowsCount &&\n visibleStartIndex > 0\n ) {\n return cellsRefStart;\n }\n if (\n enabled &&\n columnIdx === 0 &&\n rowIdx === maxVisibleRows - additionalRowsCount\n ) {\n return cellsRefEnd;\n }\n return undefined;\n };\n\n const getSlicedRows = <T extends TableRow>(rows: T[]) =>\n !enabled || rows.length < maxVisibleRows\n ? rows\n : rows.slice(visibleStartIndex, visibleStartIndex + maxVisibleRows);\n\n return {\n getSlicedRows,\n setBoundaryRef,\n };\n};\n\nexport const transformRows = <T extends TableRow>(\n rows: T[],\n expandedRowIds: string[],\n isTableExpanded?: boolean,\n): TableTreeRow<T>[] => {\n const stack = [{ rows, index: 0 }];\n const rowsArr: TableTreeRow<T>[] = [];\n while (stack.length) {\n const level = stack.length - 1;\n const node = stack[level];\n const item: T = node.rows[node.index];\n\n if (item) {\n const handledItem: TableTreeRow<T> = {\n ...item,\n options: { level },\n rows: item.rows && [...item.rows],\n };\n\n const needGoDeeper =\n Boolean(handledItem.rows) &&\n (isTableExpanded || expandedRowIds.includes(handledItem.id));\n\n if (needGoDeeper) {\n stack.push({ rows: handledItem.rows as T[], index: 0 });\n } else {\n node.index++;\n }\n\n rowsArr.push(handledItem);\n } else {\n stack.pop();\n if (stack[stack.length - 1]) {\n stack[stack.length - 1].index++;\n }\n }\n }\n return rowsArr;\n};\n\nexport function getMergedArray<TYPE>(mainArr: TYPE[], mergeArr: TYPE[]) {\n const length = Math.max(mainArr.length, mergeArr.length);\n const resultArr: TYPE[] = [];\n for (let i = 0; i < length; i++) {\n resultArr.push(mergeArr[i] ?? mainArr[i]);\n }\n return resultArr;\n}\n\nexport function calulateColSpans<T extends TableRow>(\n columns: TableColumn<T>[],\n row: TableTreeRow<T>,\n) {\n const spans: number[] = [];\n let counter = 0;\n const { length } = columns;\n const getAvailableSpan = (span: number, size: number) => {\n if (size + span > length) return length - size - span;\n return span;\n };\n columns.forEach((column) => {\n const { colSpan } = column;\n const size = spans.length > 1 ? spans.reduce((a, b) => a + b) : 0;\n if (typeof colSpan === 'number' || typeof colSpan === 'function') {\n const span = typeof colSpan === 'number' ? colSpan : colSpan(row);\n if (counter === 0) {\n spans.push(getAvailableSpan(span, size));\n } else {\n spans.push(getAvailableSpan(span - counter || 0, size));\n }\n counter = span - counter > 0 ? span - 1 : counter - span;\n } else if (counter !== 0) {\n spans.push(0);\n counter--;\n } else {\n spans.push(getAvailableSpan(1, size));\n }\n });\n return spans;\n}\n"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import _objectWithoutProperties from"@babel/runtime/helpers/objectWithoutProperties";var _excluded=["item","attributes","as"],_excluded2=["size","className","items","view","value","linePosition","fitMode","onlyIcon","getItemIcon","getItemAs","getItemAttributes","getItemRef","getItemLabel","onChange","iconSize","renderItem","getItemLeftIcon","getItemLeftSide","getItemRightIcon","getItemRightSide","getItemDisabled","disabled"];import"./Tabs.css";import React,{forwardRef}from"react";import{useRefs}from"../../hooks/useRefs";import{useChoiceGroup}from"../../hooks/useChoiceGroup/useChoiceGroup";import{useResizeObserved}from"../../hooks/useResizeObserved/useResizeObserved";import{cn}from"../../utils/bem";import{getTabsDirection,getTabsWrapper,withDefaultGetters}from"./helpers";import{TabsBorderLine,TabsRunningLine}from"./
|
|
1
|
+
import _objectWithoutProperties from"@babel/runtime/helpers/objectWithoutProperties";var _excluded=["item","attributes","as"],_excluded2=["size","className","items","view","value","linePosition","fitMode","onlyIcon","getItemIcon","getItemAs","getItemAttributes","getItemRef","getItemLabel","onChange","iconSize","renderItem","getItemLeftIcon","getItemLeftSide","getItemRightIcon","getItemRightSide","getItemDisabled","disabled"];import"./Tabs.css";import React,{forwardRef}from"react";import{useRefs}from"../../hooks/useRefs";import{useChoiceGroup}from"../../hooks/useChoiceGroup/useChoiceGroup";import{useResizeObserved}from"../../hooks/useResizeObserved/useResizeObserved";import{cn}from"../../utils/bem";import{getTabsDirection,getTabsWrapper,withDefaultGetters}from"./helpers";import{TabsBorderLine,TabsRunningLine}from"./TabsLine/TabsLine";import{TabsTab}from"./TabsTab/TabsTab";import{tabsDefaultFitMode,tabsDefaultLinePosition,tabsDefaultSize,tabsDefaultView}from"./types";export var cnTabs=cn("Tabs");function renderItemDefault(a){var b=a.item,c=a.attributes,d=void 0===c?{}:c,e=a.as,f=_objectWithoutProperties(a,_excluded);return React.createElement(TabsTab,Object.assign({},d,f,{as:e}))}var TabsRender=function(a,b){var c=withDefaultGetters(a),d=c.size,e=void 0===d?tabsDefaultSize:d,f=c.className,g=c.items,h=c.view,i=void 0===h?tabsDefaultView:h,j=c.value,k=c.linePosition,l=void 0===k?tabsDefaultLinePosition:k,m=c.fitMode,n=void 0===m?tabsDefaultFitMode:m,o=c.onlyIcon,p=c.getItemIcon,q=c.getItemAs,r=c.getItemAttributes,s=c.getItemRef,t=c.getItemLabel,u=c.onChange,v=c.iconSize,w=c.renderItem,x=void 0===w?renderItemDefault:w,y=c.getItemLeftIcon,z=c.getItemLeftSide,A=c.getItemRightIcon,B=c.getItemRightSide,C=c.getItemDisabled,D=c.disabled,E=_objectWithoutProperties(c,_excluded2),F=useChoiceGroup({value:j||null,getKey:t,callBack:u,multiple:!1}),G=F.getOnChange,H=F.getChecked,I=getTabsDirection(l),J="vertical"===I,K=useRefs(g.length,[g,n,J]),L=useResizeObserved(K,function(a){var b;return{size:null!==(b=null===a||void 0===a?void 0:a[J?"offsetHeight":"offsetWidth"])&&void 0!==b?b:0,gap:a?parseInt(getComputedStyle(a)[J?"marginBottom":"marginRight"],10):0}}),M=g.findIndex(H),N=function(a,b,c){return x({item:a,onChange:function(){null===b||void 0===b?void 0:b(),G(a).apply(void 0,arguments)},checked:H(a),label:t(a).toString(),icon:p(a),leftIcon:y(a),rightIcon:A(a),leftSide:z(a),rightSide:B(a),disabled:D||C(a),onlyIcon:o,size:e,iconSize:v,renderInDropdown:c,as:q(a)||"button",tabRef:s(a),attributes:r(a)})},O=getTabsWrapper(I,n);return React.createElement("div",Object.assign({className:cnTabs({size:e,view:i,direction:I},[f]),ref:b},E),React.createElement(O,{tabRefs:K,onChange:u,tabsDimensions:L,renderItem:N,renderItemsList:function renderItemsList(a){var b=a.withRunningLine,c=a.visibleIndexes,d=a.getTabClassName;return React.createElement("div",{className:cnTabs("List",{direction:I,linePosition:l})},g.map(function(a,b){return React.createElement("div",{ref:K[b],key:t(a),className:cnTabs("Tab",{direction:I},[null===d||void 0===d?void 0:d(b)])},N(a))}),(!(void 0!==b)||b)&&!D&&React.createElement(TabsRunningLine,{visibleIndexes:c,linePosition:l,tabsDimensions:L,activeTabIdx:M}))},getItemLabel:t,getItemChecked:H,items:g,size:e}),"bordered"===i&&React.createElement(TabsBorderLine,{linePosition:l}))};export var Tabs=forwardRef(TabsRender);export*from"./types";
|
|
2
2
|
//# sourceMappingURL=Tabs.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Tabs.js","names":["React","forwardRef","useRefs","useChoiceGroup","useResizeObserved","cn","getTabsDirection","getTabsWrapper","withDefaultGetters","TabsBorderLine","TabsRunningLine","TabsTab","tabsDefaultFitMode","tabsDefaultLinePosition","tabsDefaultSize","tabsDefaultView","cnTabs","renderItemDefault","props","item","attributes","as","otherProps","TabsRender","ref","size","className","items","view","value","linePosition","fitMode","onlyIcon","getItemIcon","getItemAs","getItemAttributes","getItemRef","getItemLabel","onChange","iconSize","renderItem","renderItemProp","getItemLeftIcon","getItemLeftSide","getItemRightIcon","getItemRightSide","getItemDisabled","disabled","getKey","callBack","multiple","getOnChange","getChecked","tabsDirection","isVertical","tabRefs","length","tabsDimensions","el","gap","parseInt","getComputedStyle","activeTabIdx","findIndex","onClick","renderInDropdown","checked","label","toString","icon","leftIcon","rightIcon","leftSide","rightSide","tabRef","Wrapper","direction","renderItemsList","withRunningLine","visibleIndexes","getTabClassName","map","idx","Tabs"],"sources":["../../../../../src/components/Tabs/Tabs.tsx"],"sourcesContent":["import './Tabs.css';\n\nimport React, { forwardRef } from 'react';\n\nimport { useRefs } from '##/hooks/useRefs';\n\nimport { useChoiceGroup } from '../../hooks/useChoiceGroup/useChoiceGroup';\nimport { useResizeObserved } from '../../hooks/useResizeObserved/useResizeObserved';\nimport { cn } from '../../utils/bem';\nimport {\n getTabsDirection,\n getTabsWrapper,\n withDefaultGetters,\n} from './helpers';\nimport { TabsBorderLine, TabsRunningLine } from './Line/TabsLine';\nimport { TabsTab } from './Tab/TabsTab';\nimport {\n RenderItemProps,\n RenderItemsListProp,\n TabDimensions,\n TabsComponent,\n tabsDefaultFitMode,\n tabsDefaultLinePosition,\n tabsDefaultSize,\n tabsDefaultView,\n TabsProps,\n} from './types';\n\nexport const cnTabs = cn('Tabs');\n\nfunction renderItemDefault<ITEM>(\n props: RenderItemProps<ITEM>,\n): React.ReactElement {\n const { item, attributes = {}, as, ...otherProps } = props;\n return <TabsTab {...attributes} {...otherProps} as={as} />;\n}\n\nconst TabsRender = (props: TabsProps, ref: React.Ref<HTMLDivElement>) => {\n const {\n size = tabsDefaultSize,\n className,\n items,\n view = tabsDefaultView,\n value,\n linePosition = tabsDefaultLinePosition,\n fitMode = tabsDefaultFitMode,\n onlyIcon,\n getItemIcon,\n getItemAs,\n getItemAttributes,\n getItemRef,\n getItemLabel,\n onChange,\n iconSize,\n renderItem: renderItemProp = renderItemDefault,\n getItemLeftIcon,\n getItemLeftSide,\n getItemRightIcon,\n getItemRightSide,\n getItemDisabled,\n disabled,\n ...otherProps\n } = withDefaultGetters(props);\n\n const { getOnChange, getChecked } = useChoiceGroup({\n value: value || null,\n getKey: getItemLabel,\n callBack: onChange,\n multiple: false,\n });\n\n const tabsDirection = getTabsDirection(linePosition);\n const isVertical = tabsDirection === 'vertical';\n const tabRefs = useRefs<HTMLDivElement>(items.length, [\n items,\n fitMode,\n isVertical,\n ]);\n\n const tabsDimensions = useResizeObserved(\n tabRefs,\n (el): TabDimensions => ({\n size: el?.[isVertical ? 'offsetHeight' : 'offsetWidth'] ?? 0,\n gap: el\n ? parseInt(\n getComputedStyle(el)[isVertical ? 'marginBottom' : 'marginRight'],\n 10,\n )\n : 0,\n }),\n );\n\n const activeTabIdx = items.findIndex(getChecked);\n\n const renderItem = (\n item: typeof items[number],\n onClick?: () => void,\n renderInDropdown?: boolean,\n ) =>\n renderItemProp({\n item,\n onChange: (...args) => {\n onClick?.();\n getOnChange(item)(...args);\n },\n checked: getChecked(item),\n label: getItemLabel(item).toString(),\n icon: getItemIcon(item),\n leftIcon: getItemLeftIcon(item),\n rightIcon: getItemRightIcon(item),\n leftSide: getItemLeftSide(item),\n rightSide: getItemRightSide(item),\n disabled: disabled || getItemDisabled(item),\n onlyIcon,\n size,\n iconSize,\n renderInDropdown,\n as: getItemAs(item) || 'button',\n tabRef: getItemRef(item),\n attributes: getItemAttributes(item),\n });\n\n const renderItemsList: RenderItemsListProp = ({\n withRunningLine = true,\n visibleIndexes,\n getTabClassName,\n }) => (\n <div className={cnTabs('List', { direction: tabsDirection, linePosition })}>\n {items.map((item, idx) => (\n <div\n ref={tabRefs[idx]}\n key={getItemLabel(item)}\n className={cnTabs('Tab', { direction: tabsDirection }, [\n getTabClassName?.(idx),\n ])}\n >\n {renderItem(item)}\n </div>\n ))}\n {withRunningLine && !disabled && (\n <TabsRunningLine\n visibleIndexes={visibleIndexes}\n linePosition={linePosition}\n tabsDimensions={tabsDimensions}\n activeTabIdx={activeTabIdx}\n />\n )}\n </div>\n );\n\n const Wrapper = getTabsWrapper(tabsDirection, fitMode);\n\n return (\n <div\n className={cnTabs({ size, view, direction: tabsDirection }, [className])}\n ref={ref}\n {...otherProps}\n >\n <Wrapper\n tabRefs={tabRefs}\n tabsDimensions={tabsDimensions}\n renderItem={renderItem}\n renderItemsList={renderItemsList}\n getItemLabel={getItemLabel}\n getItemChecked={getChecked}\n items={items}\n size={size}\n />\n {view === 'bordered' && <TabsBorderLine linePosition={linePosition} />}\n </div>\n );\n};\n\nexport const Tabs = forwardRef(TabsRender) as TabsComponent;\n\nexport * from './types';\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Tabs.js","names":["React","forwardRef","useRefs","useChoiceGroup","useResizeObserved","cn","getTabsDirection","getTabsWrapper","withDefaultGetters","TabsBorderLine","TabsRunningLine","TabsTab","tabsDefaultFitMode","tabsDefaultLinePosition","tabsDefaultSize","tabsDefaultView","cnTabs","renderItemDefault","props","item","attributes","as","otherProps","TabsRender","ref","size","className","items","view","value","linePosition","fitMode","onlyIcon","getItemIcon","getItemAs","getItemAttributes","getItemRef","getItemLabel","onChange","iconSize","renderItem","renderItemProp","getItemLeftIcon","getItemLeftSide","getItemRightIcon","getItemRightSide","getItemDisabled","disabled","getKey","callBack","multiple","getOnChange","getChecked","tabsDirection","isVertical","tabRefs","length","tabsDimensions","el","gap","parseInt","getComputedStyle","activeTabIdx","findIndex","onClick","renderInDropdown","checked","label","toString","icon","leftIcon","rightIcon","leftSide","rightSide","tabRef","Wrapper","direction","renderItemsList","withRunningLine","visibleIndexes","getTabClassName","map","idx","Tabs"],"sources":["../../../../../src/components/Tabs/Tabs.tsx"],"sourcesContent":["import './Tabs.css';\n\nimport React, { forwardRef } from 'react';\n\nimport { useRefs } from '##/hooks/useRefs';\n\nimport { useChoiceGroup } from '../../hooks/useChoiceGroup/useChoiceGroup';\nimport { useResizeObserved } from '../../hooks/useResizeObserved/useResizeObserved';\nimport { cn } from '../../utils/bem';\nimport {\n getTabsDirection,\n getTabsWrapper,\n withDefaultGetters,\n} from './helpers';\nimport { TabsBorderLine, TabsRunningLine } from './TabsLine/TabsLine';\nimport { TabsTab } from './TabsTab/TabsTab';\nimport {\n RenderItemProps,\n RenderItemsListProp,\n TabDimensions,\n TabsComponent,\n tabsDefaultFitMode,\n tabsDefaultLinePosition,\n tabsDefaultSize,\n tabsDefaultView,\n TabsProps,\n} from './types';\n\nexport const cnTabs = cn('Tabs');\n\nfunction renderItemDefault<ITEM>(\n props: RenderItemProps<ITEM>,\n): React.ReactElement {\n const { item, attributes = {}, as, ...otherProps } = props;\n return <TabsTab {...attributes} {...otherProps} as={as} />;\n}\n\nconst TabsRender = (props: TabsProps, ref: React.Ref<HTMLDivElement>) => {\n const {\n size = tabsDefaultSize,\n className,\n items,\n view = tabsDefaultView,\n value,\n linePosition = tabsDefaultLinePosition,\n fitMode = tabsDefaultFitMode,\n onlyIcon,\n getItemIcon,\n getItemAs,\n getItemAttributes,\n getItemRef,\n getItemLabel,\n onChange,\n iconSize,\n renderItem: renderItemProp = renderItemDefault,\n getItemLeftIcon,\n getItemLeftSide,\n getItemRightIcon,\n getItemRightSide,\n getItemDisabled,\n disabled,\n ...otherProps\n } = withDefaultGetters(props);\n\n const { getOnChange, getChecked } = useChoiceGroup({\n value: value || null,\n getKey: getItemLabel,\n callBack: onChange,\n multiple: false,\n });\n\n const tabsDirection = getTabsDirection(linePosition);\n const isVertical = tabsDirection === 'vertical';\n const tabRefs = useRefs<HTMLDivElement>(items.length, [\n items,\n fitMode,\n isVertical,\n ]);\n\n const tabsDimensions = useResizeObserved(\n tabRefs,\n (el): TabDimensions => ({\n size: el?.[isVertical ? 'offsetHeight' : 'offsetWidth'] ?? 0,\n gap: el\n ? parseInt(\n getComputedStyle(el)[isVertical ? 'marginBottom' : 'marginRight'],\n 10,\n )\n : 0,\n }),\n );\n\n const activeTabIdx = items.findIndex(getChecked);\n\n const renderItem = (\n item: typeof items[number],\n onClick?: () => void,\n renderInDropdown?: boolean,\n ) =>\n renderItemProp({\n item,\n onChange: (...args) => {\n onClick?.();\n getOnChange(item)(...args);\n },\n checked: getChecked(item),\n label: getItemLabel(item).toString(),\n icon: getItemIcon(item),\n leftIcon: getItemLeftIcon(item),\n rightIcon: getItemRightIcon(item),\n leftSide: getItemLeftSide(item),\n rightSide: getItemRightSide(item),\n disabled: disabled || getItemDisabled(item),\n onlyIcon,\n size,\n iconSize,\n renderInDropdown,\n as: getItemAs(item) || 'button',\n tabRef: getItemRef(item),\n attributes: getItemAttributes(item),\n });\n\n const renderItemsList: RenderItemsListProp = ({\n withRunningLine = true,\n visibleIndexes,\n getTabClassName,\n }) => (\n <div className={cnTabs('List', { direction: tabsDirection, linePosition })}>\n {items.map((item, idx) => (\n <div\n ref={tabRefs[idx]}\n key={getItemLabel(item)}\n className={cnTabs('Tab', { direction: tabsDirection }, [\n getTabClassName?.(idx),\n ])}\n >\n {renderItem(item)}\n </div>\n ))}\n {withRunningLine && !disabled && (\n <TabsRunningLine\n visibleIndexes={visibleIndexes}\n linePosition={linePosition}\n tabsDimensions={tabsDimensions}\n activeTabIdx={activeTabIdx}\n />\n )}\n </div>\n );\n\n const Wrapper = getTabsWrapper(tabsDirection, fitMode);\n\n return (\n <div\n className={cnTabs({ size, view, direction: tabsDirection }, [className])}\n ref={ref}\n {...otherProps}\n >\n <Wrapper\n tabRefs={tabRefs}\n onChange={onChange}\n tabsDimensions={tabsDimensions}\n renderItem={renderItem}\n renderItemsList={renderItemsList}\n getItemLabel={getItemLabel}\n getItemChecked={getChecked}\n items={items}\n size={size}\n />\n {view === 'bordered' && <TabsBorderLine linePosition={linePosition} />}\n </div>\n );\n};\n\nexport const Tabs = forwardRef(TabsRender) as TabsComponent;\n\nexport * from './types';\n"],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import './TabsFitModeDropdownWrapper.css';
|
|
2
2
|
import React from 'react';
|
|
3
3
|
import { TabsFitModeWrapperProps } from '../types';
|
|
4
|
-
export declare const TabsFitModeDropdownWrapper: <ITEM>({ items, tabsDimensions, tabRefs, getItemLabel, getItemChecked, renderItem, renderItemsList, size, }: TabsFitModeWrapperProps<ITEM>) => React.ReactElement | null;
|
|
4
|
+
export declare const TabsFitModeDropdownWrapper: <ITEM>({ items, tabsDimensions, tabRefs, getItemLabel, getItemChecked, renderItem, onChange, renderItemsList, size, }: TabsFitModeWrapperProps<ITEM>) => React.ReactElement | null;
|
package/__internal__/src/components/Tabs/TabsFitModeDropdownWrapper/TabsFitModeDropdownWrapper.js
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import _toConsumableArray from"@babel/runtime/helpers/toConsumableArray";import"./TabsFitModeDropdownWrapper.css";import React from"react";import{cn}from"../../../utils/bem";import{getTabsWidth}from"../helpers";import{TabsMoreItems}from"../TabsMoreItems/TabsMoreItems";import{useFittingItems}from"./useFittingItems";var cnTabsFitModeDropdownWrapper=cn("TabsFitModeDropdownWrapper");export var TabsFitModeDropdownWrapper=function(a){var b=a.items,c=a.tabsDimensions,d=a.tabRefs,e=a.getItemLabel,f=a.getItemChecked,g=a.renderItem,h=a.onChange,i=a.renderItemsList,j=a.size,k=React.useRef(null),l=React.useRef(null),m=b.findIndex(f),n=useFittingItems({tabsDimensions:c,containerRef:k,moreItemsRef:l,activeIndex:m}),o=n.visibleIndexes,p=n.isItemHidden,q=b.filter(function(a,b){return p(b)}),r=React.useMemo(function(){return d.length?Math.max.apply(Math,_toConsumableArray(d.map(function(a){var b,c;return null!==(b=null===(c=a.current)||void 0===c?void 0:c.offsetHeight)&&void 0!==b?b:0}))):0},[c]),s=getTabsWidth(c.filter(function(a,b){return!p(b)}));return React.createElement("div",{ref:k,className:cnTabsFitModeDropdownWrapper(),style:{height:r}},React.createElement("div",{className:cnTabsFitModeDropdownWrapper("Tabs")},i({visibleIndexes:o,withRunningLine:!0,getTabClassName:function getTabClassName(a){return cnTabsFitModeDropdownWrapper("Tab",{hidden:p(a)})}})),React.createElement("div",{ref:l,className:cnTabsFitModeDropdownWrapper("MoreItems",{hidden:!q.length}),style:{left:q.length?s:void 0}},React.createElement(TabsMoreItems,{items:q,renderItem:g,onChange:h,getItemLabel:e,height:r,size:j})))};
|
|
2
|
+
//# sourceMappingURL=TabsFitModeDropdownWrapper.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TabsFitModeDropdownWrapper.js","names":["React","cn","getTabsWidth","TabsMoreItems","useFittingItems","cnTabsFitModeDropdownWrapper","TabsFitModeDropdownWrapper","items","tabsDimensions","tabRefs","getItemLabel","getItemChecked","renderItem","onChange","renderItemsList","size","ref","useRef","moreItemsRef","activeIndex","findIndex","containerRef","visibleIndexes","isItemHidden","hiddenItems","filter","_item","idx","maxTabHeight","useMemo","length","Math","max","map","tabRef","current","offsetHeight","visibleTabsWidth","_td","height","withRunningLine","getTabClassName","hidden","left"],"sources":["../../../../../../src/components/Tabs/TabsFitModeDropdownWrapper/TabsFitModeDropdownWrapper.tsx"],"sourcesContent":["import './TabsFitModeDropdownWrapper.css';\n\nimport React from 'react';\n\nimport { cn } from '../../../utils/bem';\nimport { getTabsWidth } from '../helpers';\nimport { TabsMoreItems } from '../TabsMoreItems/TabsMoreItems';\nimport { TabsFitModeWrapperProps } from '../types';\nimport { useFittingItems } from './useFittingItems';\n\nconst cnTabsFitModeDropdownWrapper = cn('TabsFitModeDropdownWrapper');\n\nexport const TabsFitModeDropdownWrapper = <ITEM,>({\n items,\n tabsDimensions,\n tabRefs,\n getItemLabel,\n getItemChecked,\n renderItem,\n onChange,\n renderItemsList,\n size,\n}: TabsFitModeWrapperProps<ITEM>): React.ReactElement | null => {\n const ref = React.useRef<HTMLDivElement>(null);\n const moreItemsRef = React.useRef<HTMLDivElement>(null);\n\n const activeIndex = items.findIndex(getItemChecked);\n\n const { visibleIndexes, isItemHidden } = useFittingItems({\n tabsDimensions,\n containerRef: ref,\n moreItemsRef,\n activeIndex,\n });\n\n const hiddenItems = items.filter((_item, idx) => isItemHidden(idx));\n const maxTabHeight: number = React.useMemo(() => {\n if (!tabRefs.length) {\n return 0;\n }\n return Math.max(\n ...tabRefs.map((tabRef) => tabRef.current?.offsetHeight ?? 0),\n );\n }, [tabsDimensions]);\n\n const visibleTabsWidth = getTabsWidth(\n tabsDimensions.filter((_td, idx) => !isItemHidden(idx)),\n );\n\n return (\n <div\n ref={ref}\n className={cnTabsFitModeDropdownWrapper()}\n style={{ height: maxTabHeight }}\n >\n <div className={cnTabsFitModeDropdownWrapper('Tabs')}>\n {renderItemsList({\n visibleIndexes,\n withRunningLine: true,\n getTabClassName: (idx) =>\n cnTabsFitModeDropdownWrapper('Tab', { hidden: isItemHidden(idx) }),\n })}\n </div>\n <div\n ref={moreItemsRef}\n className={cnTabsFitModeDropdownWrapper('MoreItems', {\n hidden: !hiddenItems.length,\n })}\n style={{\n /* В Safari скрытые табы с абсолютом продолжают растягивать контейнер,\n поэтому приходится позиционировать кнопку абсолютом */\n left: hiddenItems.length ? visibleTabsWidth : undefined,\n }}\n >\n <TabsMoreItems\n items={hiddenItems}\n renderItem={renderItem}\n onChange={onChange}\n getItemLabel={getItemLabel}\n height={maxTabHeight}\n size={size}\n />\n </div>\n </div>\n );\n};\n"],"mappings":"yEAAA,yCAEA,MAAOA,MAAP,KAAkB,OAAlB,CAEA,OAASC,EAAT,0BACA,OAASC,YAAT,kBACA,OAASC,aAAT,sCAEA,OAASC,eAAT,yBAEA,GAAMC,6BAA4B,CAAGJ,EAAE,CAAC,4BAAD,CAAvC,CAEA,MAAO,IAAMK,2BAA0B,CAAG,WAUsB,IAT9DC,EAS8D,GAT9DA,KAS8D,CAR9DC,CAQ8D,GAR9DA,cAQ8D,CAP9DC,CAO8D,GAP9DA,OAO8D,CAN9DC,CAM8D,GAN9DA,YAM8D,CAL9DC,CAK8D,GAL9DA,cAK8D,CAJ9DC,CAI8D,GAJ9DA,UAI8D,CAH9DC,CAG8D,GAH9DA,QAG8D,CAF9DC,CAE8D,GAF9DA,eAE8D,CAD9DC,CAC8D,GAD9DA,IAC8D,CACxDC,CAAG,CAAGhB,KAAK,CAACiB,MAAN,CAA6B,IAA7B,CADkD,CAExDC,CAAY,CAAGlB,KAAK,CAACiB,MAAN,CAA6B,IAA7B,CAFyC,CAIxDE,CAAW,CAAGZ,CAAK,CAACa,SAAN,CAAgBT,CAAhB,CAJ0C,GAMrBP,eAAe,CAAC,CACvDI,cAAc,CAAdA,CADuD,CAEvDa,YAAY,CAAEL,CAFyC,CAGvDE,YAAY,CAAZA,CAHuD,CAIvDC,WAAW,CAAXA,CAJuD,CAAD,CANM,CAMtDG,CANsD,GAMtDA,cANsD,CAMtCC,CANsC,GAMtCA,YANsC,CAaxDC,CAAW,CAAGjB,CAAK,CAACkB,MAAN,CAAa,SAACC,CAAD,CAAQC,CAAR,QAAgBJ,EAAY,CAACI,CAAD,CAA5B,CAAb,CAb0C,CAcxDC,CAAoB,CAAG5B,KAAK,CAAC6B,OAAN,CAAc,UAAM,OAC1CpB,EAAO,CAACqB,MADkC,CAIxCC,IAAI,CAACC,GAAL,OAAAD,IAAI,oBACNtB,CAAO,CAACwB,GAAR,CAAY,SAACC,CAAD,qCAAYA,CAAM,CAACC,OAAnB,qBAAY,EAAgBC,YAA5B,gBAA4C,CAA5C,CAAZ,CADM,EAJoC,CAEtC,CAKV,CAP4B,CAO1B,CAAC5B,CAAD,CAP0B,CAdiC,CAuBxD6B,CAAgB,CAAGnC,YAAY,CACnCM,CAAc,CAACiB,MAAf,CAAsB,SAACa,CAAD,CAAMX,CAAN,QAAc,CAACJ,CAAY,CAACI,CAAD,CAA3B,CAAtB,CADmC,CAvByB,CA2B9D,MACE,4BACE,GAAG,CAAEX,CADP,CAEE,SAAS,CAAEX,4BAA4B,EAFzC,CAGE,KAAK,CAAE,CAAEkC,MAAM,CAAEX,CAAV,CAHT,EAKE,2BAAK,SAAS,CAAEvB,4BAA4B,CAAC,MAAD,CAA5C,EACGS,CAAe,CAAC,CACfQ,cAAc,CAAdA,CADe,CAEfkB,eAAe,GAFA,CAGfC,eAAe,CAAE,yBAACd,CAAD,QACftB,6BAA4B,CAAC,KAAD,CAAQ,CAAEqC,MAAM,CAAEnB,CAAY,CAACI,CAAD,CAAtB,CAAR,CADb,CAHF,CAAD,CADlB,CALF,CAaE,2BACE,GAAG,CAAET,CADP,CAEE,SAAS,CAAEb,4BAA4B,CAAC,WAAD,CAAc,CACnDqC,MAAM,CAAE,CAAClB,CAAW,CAACM,MAD8B,CAAd,CAFzC,CAKE,KAAK,CAAE,CAGLa,IAAI,CAAEnB,CAAW,CAACM,MAAZ,CAAqBO,CAArB,OAHD,CALT,EAWE,oBAAC,aAAD,EACE,KAAK,CAAEb,CADT,CAEE,UAAU,CAAEZ,CAFd,CAGE,QAAQ,CAAEC,CAHZ,CAIE,YAAY,CAAEH,CAJhB,CAKE,MAAM,CAAEkB,CALV,CAME,IAAI,CAAEb,CANR,EAXF,CAbF,CAmCH,CAzEM"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useFittingItems.js","names":["React","useMemo","useComponentSize","useFittingItems","tabsDimensions","containerRef","moreItemsRef","activeIndex","containerWidth","width","moreItemsWidth","visibleIndexes","getFittingItems","isItemHidden","useCallback","idx","includes","totalWidth","Array","from","length","map","_el","index","size","gap","arr","entries","tabDimensions","isLastItem","push"],"sources":["../../../../../../src/components/Tabs/TabsFitModeDropdownWrapper/useFittingItems.ts"],"sourcesContent":["import React, { useMemo } from 'react';\n\nimport { useComponentSize } from '../../../hooks/useComponentSize/useComponentSize';\nimport { TabDimensions } from '../types';\n\nexport const useFittingItems = ({\n tabsDimensions,\n containerRef,\n moreItemsRef,\n activeIndex,\n}: {\n tabsDimensions: TabDimensions[];\n containerRef: React.RefObject<HTMLElement>;\n moreItemsRef: React.RefObject<HTMLElement>;\n activeIndex?: number;\n}): {\n visibleIndexes: number[];\n isItemHidden: (idx: number) => boolean;\n} => {\n const { width: containerWidth } = useComponentSize(containerRef);\n const { width: moreItemsWidth } = useComponentSize(moreItemsRef);\n\n const visibleIndexes = useMemo(\n () =>\n getFittingItems(\n tabsDimensions,\n containerWidth,\n moreItemsWidth,\n activeIndex,\n ),\n [tabsDimensions, containerWidth, moreItemsWidth, activeIndex],\n );\n\n return {\n visibleIndexes,\n isItemHidden: React.useCallback(\n (idx) => !visibleIndexes.includes(idx),\n [visibleIndexes],\n ),\n };\n};\n\nexport const getFittingItems = (\n tabsDimensions: TabDimensions[],\n totalWidth: number,\n moreItemsWidth: number,\n activeIndex?: number,\n): number[] => {\n if (!totalWidth) {\n return Array.from<number>({ length: tabsDimensions.length }).map(\n (_el, index) => index,\n );\n }\n let width =\n typeof activeIndex === 'number' && activeIndex > -1\n ? tabsDimensions[activeIndex].size + tabsDimensions[activeIndex].gap\n : 0;\n const arr: number[] = [];\n for (const [idx, tabDimensions] of tabsDimensions.entries()) {\n if (idx !== activeIndex) {\n const isLastItem = idx === tabsDimensions.length - 1;\n width += tabDimensions.size + (isLastItem ? 0 : tabDimensions.gap);\n if (width + moreItemsWidth > totalWidth) {\n if (activeIndex && !arr.includes(activeIndex)) {\n arr.push(activeIndex);\n }\n return arr;\n }\n arr.push(idx);\n } else {\n arr.push(activeIndex);\n }\n }\n\n return Array.from<number>({ length: tabsDimensions.length }).map(\n (_el, index) => index,\n );\n};\n"],"mappings":"stCAAA,MAAOA,MAAP,EAAgBC,OAAhB,KAA+B,OAA/B,CAEA,OAASC,gBAAT,wDAGA,MAAO,IAAMC,gBAAe,CAAG,WAa1B,IAZHC,EAYG,GAZHA,cAYG,CAXHC,CAWG,GAXHA,YAWG,CAVHC,CAUG,GAVHA,YAUG,CATHC,CASG,GATHA,WASG,GAC+BL,gBAAgB,CAACG,CAAD,CAD/C,CACYG,CADZ,GACKC,KADL,GAE+BP,gBAAgB,CAACI,CAAD,CAF/C,CAEYI,CAFZ,GAEKD,KAFL,CAIGE,CAAc,CAAGV,OAAO,CAC5B,iBACEW,gBAAe,CACbR,CADa,CAEbI,CAFa,CAGbE,CAHa,CAIbH,CAJa,CADjB,CAD4B,CAQ5B,CAACH,CAAD,CAAiBI,CAAjB,CAAiCE,CAAjC,CAAiDH,CAAjD,CAR4B,CAJ3B,CAeH,MAAO,CACLI,cAAc,CAAdA,CADK,CAELE,YAAY,CAAEb,KAAK,CAACc,WAAN,CACZ,SAACC,CAAD,QAAS,CAACJ,CAAc,CAACK,QAAf,CAAwBD,CAAxB,CAAV,CADY,CAEZ,CAACJ,CAAD,CAFY,CAFT,CAOR,CAnCM,CAqCP,MAAO,IAAMC,gBAAe,CAAG,SAC7BR,CAD6B,CAE7Ba,CAF6B,CAG7BP,CAH6B,CAI7BH,CAJ6B,CAKhB,CACb,GAAI,CAACU,CAAL,CACE,MAAOC,MAAK,CAACC,IAAN,CAAmB,CAAEC,MAAM,CAAEhB,CAAc,CAACgB,MAAzB,CAAnB,EAAsDC,GAAtD,CACL,SAACC,CAAD,CAAMC,CAAN,QAAgBA,EAAhB,CADK,CAAP,CAFW,MAMTd,CAAK,CACgB,QAAvB,QAAOF,EAAP,EAAiD,CAAC,CAAf,CAAAA,CAAnC,CACIH,CAAc,CAACG,CAAD,CAAd,CAA4BiB,IAA5B,CAAmCpB,CAAc,CAACG,CAAD,CAAd,CAA4BkB,GADnE,CAEI,CATO,CAUPC,CAAa,CAAG,EAVT,8BAWsBtB,CAAc,CAACuB,OAAf,EAXtB,MAWb,2BAA6D,iCAAjDZ,CAAiD,MAA5Ca,CAA4C,MAC3D,GAAIb,CAAG,GAAKR,CAAZ,CAAyB,CACvB,GAAMsB,EAAU,CAAGd,CAAG,GAAKX,CAAc,CAACgB,MAAf,CAAwB,CAAnD,CAEA,GADAX,CAAK,EAAImB,CAAa,CAACJ,IAAd,EAAsBK,CAAU,CAAG,CAAH,CAAOD,CAAa,CAACH,GAArD,CACT,CAAIhB,CAAK,CAAGC,CAAR,CAAyBO,CAA7B,CAIE,MAHIV,EAAW,EAAI,CAACmB,CAAG,CAACV,QAAJ,CAAaT,CAAb,CAGpB,EAFEmB,CAAG,CAACI,IAAJ,CAASvB,CAAT,CAEF,CAAOmB,CAAP,CAEFA,CAAG,CAACI,IAAJ,CAASf,CAAT,CACD,CAVD,IAWEW,EAAG,CAACI,IAAJ,CAASvB,CAAT,CAEH,CAzBY,+BA2Bb,MAAOW,MAAK,CAACC,IAAN,CAAmB,CAAEC,MAAM,CAAEhB,CAAc,CAACgB,MAAzB,CAAnB,EAAsDC,GAAtD,CACL,SAACC,CAAD,CAAMC,CAAN,QAAgBA,EAAhB,CADK,CAGR,CAnCM"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import _slicedToArray from"@babel/runtime/helpers/slicedToArray";import"./TabsFitModeScrollWrapper.css";import{IconArrowLeft}from"@consta/icons/IconArrowLeft";import{IconArrowRight}from"@consta/icons/IconArrowRight";import React from"react";import{useResizeObserved}from"../../../hooks/useResizeObserved/useResizeObserved";import{useScrollPosition}from"../../../hooks/useScrollPosition/useScrollPosition";import{cn}from"../../../utils/bem";import{Button}from"../../Button/Button";import{getTabsWidth,getVisibleTabsRange}from"../helpers";var cnTabsFitModeScrollWrapper=cn("TabsFitModeScrollWrapper");export var TabsFitModeScrollWrapper=function(a){var b=a.tabsDimensions,c=a.items,d=a.renderItemsList,e=a.getItemChecked,f=React.useRef(null),g=useResizeObserved(React.useMemo(function(){return[f]},[f,c]),function(a){var b;return{isScrollable:a&&a.scrollWidth>a.offsetWidth,width:null!==(b=null===a||void 0===a?void 0:a.offsetWidth)&&void 0!==b?b:0,paddingLeft:a?parseInt(getComputedStyle(a).paddingLeft,10):0}}),h=_slicedToArray(g,1),i=h[0],j=i.isScrollable,k=i.width,l=i.paddingLeft,m=useScrollPosition(f.current),n=m.scrollLeft,o=getVisibleTabsRange({tabsDimensions:b,containerWidth:k,containerPaddingLeft:l,scrollLeft:n}),p=_slicedToArray(o,2),q=p[0],r=p[1],s=function(a){if(!(a>=q&&a<=r)){var c,d=getTabsWidth(b.slice(0,a));null===(c=f.current)||void 0===c?void 0:c.scrollTo({left:d,behavior:"smooth"})}},t=function(){s(q-1)},u=function(){s(r+1)},v=c.findIndex(e);return React.useEffect(function(){j&&s(v)},[v,j]),React.createElement("div",{className:cnTabsFitModeScrollWrapper()},j&&React.createElement(React.Fragment,null,["prev","next"].map(function(a){return React.createElement(Button,{key:a,view:"clear",type:"button",size:"xs",onlyIcon:!0,disabled:"prev"===a?0===q:r===c.length-1,iconLeft:"prev"===a?IconArrowLeft:IconArrowRight,className:cnTabsFitModeScrollWrapper("Button",{to:a}),onClick:"prev"===a?t:u})})),React.createElement("div",{className:cnTabsFitModeScrollWrapper("Content"),ref:f},d({visibleIndexes:Array.from(Array(c.length).keys()),getTabClassName:function getTabClassName(a){return cnTabsFitModeScrollWrapper("Tab",{noMargin:a===c.length-1})}})))};
|
|
2
|
+
//# sourceMappingURL=TabsFitModeScrollWrapper.js.map
|
package/__internal__/src/components/Tabs/TabsFitModeScrollWrapper/TabsFitModeScrollWrapper.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TabsFitModeScrollWrapper.js","names":["IconArrowLeft","IconArrowRight","React","useResizeObserved","useScrollPosition","cn","Button","getTabsWidth","getVisibleTabsRange","cnTabsFitModeScrollWrapper","TabsFitModeScrollWrapper","tabsDimensions","items","renderItemsList","getItemChecked","scrollContainerRef","useRef","useMemo","el","isScrollable","scrollWidth","offsetWidth","width","paddingLeft","parseInt","getComputedStyle","containerWidth","containerPaddingLeft","current","scrollLeft","firstVisibleTabIdx","lastVisibleTabIdx","scrollTabIntoView","idx","previousTabsWidth","slice","scrollTo","left","behavior","scrollPrev","scrollNext","checkedTabIdx","findIndex","useEffect","map","buttonTo","length","to","visibleIndexes","Array","from","keys","getTabClassName","noMargin"],"sources":["../../../../../../src/components/Tabs/TabsFitModeScrollWrapper/TabsFitModeScrollWrapper.tsx"],"sourcesContent":["import './TabsFitModeScrollWrapper.css';\n\nimport { IconArrowLeft } from '@consta/icons/IconArrowLeft';\nimport { IconArrowRight } from '@consta/icons/IconArrowRight';\nimport React from 'react';\n\nimport { useResizeObserved } from '../../../hooks/useResizeObserved/useResizeObserved';\nimport { useScrollPosition } from '../../../hooks/useScrollPosition/useScrollPosition';\nimport { cn } from '../../../utils/bem';\nimport { Button } from '../../Button/Button';\nimport { getTabsWidth, getVisibleTabsRange } from '../helpers';\nimport { TabsFitModeWrapperProps } from '../types';\n\nconst cnTabsFitModeScrollWrapper = cn('TabsFitModeScrollWrapper');\n\nexport const TabsFitModeScrollWrapper = <ITEM,>({\n tabsDimensions,\n items,\n renderItemsList,\n getItemChecked,\n}: TabsFitModeWrapperProps<ITEM>): React.ReactElement | null => {\n const scrollContainerRef = React.useRef<HTMLDivElement>(null);\n const [\n { isScrollable, width: containerWidth, paddingLeft: containerPaddingLeft },\n ] = useResizeObserved(\n React.useMemo(() => [scrollContainerRef], [scrollContainerRef, items]),\n (el) => ({\n isScrollable: el && el.scrollWidth > el.offsetWidth,\n width: el?.offsetWidth ?? 0,\n paddingLeft: el ? parseInt(getComputedStyle(el).paddingLeft, 10) : 0,\n }),\n );\n const { scrollLeft } = useScrollPosition(scrollContainerRef.current);\n\n const [firstVisibleTabIdx, lastVisibleTabIdx] = getVisibleTabsRange({\n tabsDimensions,\n containerWidth,\n containerPaddingLeft,\n scrollLeft,\n });\n\n const scrollTabIntoView = (idx: number) => {\n const tabIsVisible = idx >= firstVisibleTabIdx && idx <= lastVisibleTabIdx;\n\n if (!tabIsVisible) {\n const previousTabsWidth = getTabsWidth(tabsDimensions.slice(0, idx));\n scrollContainerRef.current?.scrollTo({\n left: previousTabsWidth,\n behavior: 'smooth',\n });\n }\n };\n\n const scrollPrev = () => {\n scrollTabIntoView(firstVisibleTabIdx - 1);\n };\n\n const scrollNext = () => {\n scrollTabIntoView(lastVisibleTabIdx + 1);\n };\n\n // Подскролливаем к выбранному табу\n const checkedTabIdx = items.findIndex(getItemChecked);\n React.useEffect(() => {\n if (isScrollable) {\n scrollTabIntoView(checkedTabIdx);\n }\n }, [checkedTabIdx, isScrollable]);\n\n return (\n <div className={cnTabsFitModeScrollWrapper()}>\n {isScrollable && (\n <>\n {(['prev', 'next'] as const).map((buttonTo) => (\n <Button\n key={buttonTo}\n view=\"clear\"\n type=\"button\"\n size=\"xs\"\n onlyIcon\n disabled={\n buttonTo === 'prev'\n ? firstVisibleTabIdx === 0\n : lastVisibleTabIdx === items.length - 1\n }\n iconLeft={buttonTo === 'prev' ? IconArrowLeft : IconArrowRight}\n className={cnTabsFitModeScrollWrapper('Button', { to: buttonTo })}\n onClick={buttonTo === 'prev' ? scrollPrev : scrollNext}\n />\n ))}\n </>\n )}\n <div\n className={cnTabsFitModeScrollWrapper('Content')}\n ref={scrollContainerRef}\n >\n {renderItemsList({\n visibleIndexes: Array.from(Array(items.length).keys()),\n getTabClassName: (idx) =>\n cnTabsFitModeScrollWrapper('Tab', {\n noMargin: idx === items.length - 1,\n }),\n })}\n </div>\n </div>\n );\n};\n"],"mappings":"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"}
|
package/__internal__/src/components/Tabs/TabsFitModeScrollWrapper/__test__/helpers.test.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"helpers.test.js","names":["getVisibleTabsRange","describe","tabsDimensions","size","gap","it","expect","containerWidth","scrollLeft","containerPaddingLeft","toEqual"],"sources":["../../../../../../../src/components/Tabs/TabsFitModeScrollWrapper/__test__/helpers.test.ts"],"sourcesContent":["import { getVisibleTabsRange } from '../../helpers';\nimport { TabDimensions } from '../../types';\n\ndescribe('getVisibleTabsRange', () => {\n const tabsDimensions: TabDimensions[] = [\n {\n size: 100,\n gap: 10,\n },\n {\n size: 100,\n gap: 10,\n },\n {\n size: 100,\n gap: 0,\n },\n ];\n\n it('возвращает все табы, если все вмещаются', () => {\n expect(\n getVisibleTabsRange({\n tabsDimensions,\n containerWidth: 330,\n scrollLeft: 0,\n containerPaddingLeft: 10,\n }),\n ).toEqual([0, 2]);\n });\n\n it('возвращает все табы, если проскроллили только паддинг', () => {\n expect(\n getVisibleTabsRange({\n tabsDimensions,\n containerWidth: 320,\n scrollLeft: 10,\n containerPaddingLeft: 10,\n }),\n ).toEqual([0, 2]);\n });\n\n it('возвращает все табы, кроме последнего, если последний не вместился полностью', () => {\n expect(\n getVisibleTabsRange({\n tabsDimensions,\n containerWidth: 329,\n scrollLeft: 0,\n containerPaddingLeft: 10,\n }),\n ).toEqual([0, 1]);\n });\n\n it('возвращает все табы, кроме первого, если первый не виден полностью из-за скролла', () => {\n expect(\n getVisibleTabsRange({\n tabsDimensions,\n containerWidth: 319,\n scrollLeft: 11,\n containerPaddingLeft: 10,\n }),\n ).toEqual([1, 2]);\n });\n\n it('возвращает только средний таб, если первый и последний не видны полностью', () => {\n expect(\n getVisibleTabsRange({\n tabsDimensions,\n containerWidth: 318,\n scrollLeft: 11,\n containerPaddingLeft: 10,\n }),\n ).toEqual([1, 1]);\n });\n\n it('возвращает только средний таб, даже если он не влез полностью, но виден его левый край', () => {\n expect(\n getVisibleTabsRange({\n tabsDimensions,\n containerWidth: 50,\n scrollLeft: 110,\n containerPaddingLeft: 10,\n }),\n ).toEqual([1, 1]);\n });\n\n it('возвращает только первый таб, если ничего не влезает', () => {\n expect(\n getVisibleTabsRange({\n tabsDimensions,\n containerWidth: 10,\n scrollLeft: 0,\n containerPaddingLeft: 10,\n }),\n ).toEqual([0, 0]);\n });\n});\n"],"mappings":"AAAA,OAASA,mBAAT,qBAGAC,QAAQ,CAAC,qBAAD,CAAwB,UAAM,CACpC,GAAMC,EAA+B,CAAG,CACtC,CACEC,IAAI,CAAE,GADR,CAEEC,GAAG,CAAE,EAFP,CADsC,CAKtC,CACED,IAAI,CAAE,GADR,CAEEC,GAAG,CAAE,EAFP,CALsC,CAStC,CACED,IAAI,CAAE,GADR,CAEEC,GAAG,CAAE,CAFP,CATsC,CAAxC,CAeAC,EAAE,CAAC,8MAAD,CAA4C,UAAM,CAClDC,MAAM,CACJN,mBAAmB,CAAC,CAClBE,cAAc,CAAdA,CADkB,CAElBK,cAAc,CAAE,GAFE,CAGlBC,UAAU,CAAE,CAHM,CAIlBC,oBAAoB,CAAE,EAJJ,CAAD,CADf,CAAN,CAOEC,OAPF,CAOU,CAAC,CAAD,CAAI,CAAJ,CAPV,CAQD,CATC,CAhBkC,CA2BpCL,EAAE,CAAC,6RAAD,CAA0D,UAAM,CAChEC,MAAM,CACJN,mBAAmB,CAAC,CAClBE,cAAc,CAAdA,CADkB,CAElBK,cAAc,CAAE,GAFE,CAGlBC,UAAU,CAAE,EAHM,CAIlBC,oBAAoB,CAAE,EAJJ,CAAD,CADf,CAAN,CAOEC,OAPF,CAOU,CAAC,CAAD,CAAI,CAAJ,CAPV,CAQD,CATC,CA3BkC,CAsCpCL,EAAE,CAAC,mZAAD,CAAiF,UAAM,CACvFC,MAAM,CACJN,mBAAmB,CAAC,CAClBE,cAAc,CAAdA,CADkB,CAElBK,cAAc,CAAE,GAFE,CAGlBC,UAAU,CAAE,CAHM,CAIlBC,oBAAoB,CAAE,EAJJ,CAAD,CADf,CAAN,CAOEC,OAPF,CAOU,CAAC,CAAD,CAAI,CAAJ,CAPV,CAQD,CATC,CAtCkC,CAiDpCL,EAAE,CAAC,4ZAAD,CAAqF,UAAM,CAC3FC,MAAM,CACJN,mBAAmB,CAAC,CAClBE,cAAc,CAAdA,CADkB,CAElBK,cAAc,CAAE,GAFE,CAGlBC,UAAU,CAAE,EAHM,CAIlBC,oBAAoB,CAAE,EAJJ,CAAD,CADf,CAAN,CAOEC,OAPF,CAOU,CAAC,CAAD,CAAI,CAAJ,CAPV,CAQD,CATC,CAjDkC,CA4DpCL,EAAE,CAAC,iYAAD,CAA8E,UAAM,CACpFC,MAAM,CACJN,mBAAmB,CAAC,CAClBE,cAAc,CAAdA,CADkB,CAElBK,cAAc,CAAE,GAFE,CAGlBC,UAAU,CAAE,EAHM,CAIlBC,oBAAoB,CAAE,EAJJ,CAAD,CADf,CAAN,CAOEC,OAPF,CAOU,CAAC,CAAD,CAAI,CAAJ,CAPV,CAQD,CATC,CA5DkC,CAuEpCL,EAAE,CAAC,sbAAD,CAA2F,UAAM,CACjGC,MAAM,CACJN,mBAAmB,CAAC,CAClBE,cAAc,CAAdA,CADkB,CAElBK,cAAc,CAAE,EAFE,CAGlBC,UAAU,CAAE,GAHM,CAIlBC,oBAAoB,CAAE,EAJJ,CAAD,CADf,CAAN,CAOEC,OAPF,CAOU,CAAC,CAAD,CAAI,CAAJ,CAPV,CAQD,CATC,CAvEkC,CAkFpCL,EAAE,CAAC,kRAAD,CAAyD,UAAM,CAC/DC,MAAM,CACJN,mBAAmB,CAAC,CAClBE,cAAc,CAAdA,CADkB,CAElBK,cAAc,CAAE,EAFE,CAGlBC,UAAU,CAAE,CAHM,CAIlBC,oBAAoB,CAAE,EAJJ,CAAD,CADf,CAAN,CAOEC,OAPF,CAOU,CAAC,CAAD,CAAI,CAAJ,CAPV,CAQD,CATC,CAUH,CA5FO,C"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TabsLine.js","names":["React","useMemo","cn","cnTabsLine","TabsBorderLine","linePosition","TabsRunningLine","activeTabIdx","tabsDimensions","visibleIndexes","size","offset","reduce","a","v","index","includes","gap","TabsLine","type","position","formatCSSValue","n"],"sources":["../../../../../../src/components/Tabs/TabsLine/TabsLine.tsx"],"sourcesContent":["import './TabsLine.css';\n\nimport React, { useMemo } from 'react';\n\nimport { cn } from '../../../utils/bem';\nimport { TabDimensions, TabsPropLinePosition } from '../types';\n\nconst cnTabsLine = cn('TabsLine');\n\nexport const TabsBorderLine: React.FC<{\n linePosition: TabsPropLinePosition;\n}> = ({ linePosition }) => {\n return <TabsLine type=\"border\" linePosition={linePosition} size=\"100%\" />;\n};\n\nexport const TabsRunningLine: React.FC<{\n linePosition: TabsPropLinePosition;\n activeTabIdx: number;\n visibleIndexes?: number[];\n tabsDimensions: TabDimensions[];\n}> = ({ linePosition, activeTabIdx, tabsDimensions, visibleIndexes }) => {\n const size = tabsDimensions[activeTabIdx]?.size ?? 0;\n\n const offset = useMemo(\n () =>\n tabsDimensions.reduce(\n (a, v, index) =>\n a +\n (visibleIndexes?.includes(index) && index < activeTabIdx\n ? v.size + v.gap\n : 0),\n 0,\n ),\n [tabsDimensions, visibleIndexes, activeTabIdx],\n );\n\n return (\n <TabsLine\n type=\"running\"\n linePosition={linePosition}\n size={size}\n offset={offset}\n />\n );\n};\n\nconst TabsLine: React.FC<{\n type: 'border' | 'running';\n linePosition: TabsPropLinePosition;\n size: number | string;\n offset?: number | string;\n}> = ({ type, linePosition, size, offset = '0px' }) => (\n <div\n className={cnTabsLine({ type, position: linePosition })}\n style={{\n ['--line-length' as string]: formatCSSValue(size),\n ['--line-offset' as string]: formatCSSValue(offset),\n }}\n />\n);\n\nconst formatCSSValue = (n: number | string) =>\n typeof n === 'number' ? `${n}px` : n;\n"],"mappings":"mEAAA,uBAEA,MAAOA,MAAP,EAAgBC,OAAhB,KAA+B,OAA/B,CAEA,OAASC,EAAT,0BAGA,GAAMC,WAAU,CAAGD,EAAE,CAAC,UAAD,CAArB,CAEA,MAAO,IAAME,eAEX,CAAG,WAAsB,IAAnBC,EAAmB,GAAnBA,YAAmB,CACzB,MAAO,qBAAC,QAAD,EAAU,IAAI,CAAC,QAAf,CAAwB,YAAY,CAAEA,CAAtC,CAAoD,IAAI,CAAC,MAAzD,EACR,CAJM,CAMP,MAAO,IAAMC,gBAKX,CAAG,WAAoE,SAAjED,CAAiE,GAAjEA,YAAiE,CAAnDE,CAAmD,GAAnDA,YAAmD,CAArCC,CAAqC,GAArCA,cAAqC,CAArBC,CAAqB,GAArBA,cAAqB,CACjEC,CAAI,qBAAGF,CAAc,CAACD,CAAD,CAAjB,qBAAG,EAA8BG,IAAjC,gBAAyC,CADoB,CAGjEC,CAAM,CAAGV,OAAO,CACpB,iBACEO,EAAc,CAACI,MAAf,CACE,SAACC,CAAD,CAAIC,CAAJ,CAAOC,CAAP,QACEF,EAAC,EACA,OAAAJ,CAAc,WAAdA,CAAA,EAAAA,CAAc,CAAEO,QAAhB,CAAyBD,CAAzB,GAAmCA,CAAK,CAAGR,CAA3C,CACGO,CAAC,CAACJ,IAAF,CAASI,CAAC,CAACG,GADd,CAEG,CAHH,CADH,CADF,CAME,CANF,CADF,CADoB,CAUpB,CAACT,CAAD,CAAiBC,CAAjB,CAAiCF,CAAjC,CAVoB,CAHiD,CAgBvE,MACE,qBAAC,QAAD,EACE,IAAI,CAAC,SADP,CAEE,YAAY,CAAEF,CAFhB,CAGE,IAAI,CAAEK,CAHR,CAIE,MAAM,CAAEC,CAJV,EAOH,CA7BM,C,GA+BDO,SAKJ,CAAG,kBAAGC,CAAH,GAAGA,IAAH,CAASd,CAAT,GAASA,YAAT,CAAuBK,CAAvB,GAAuBA,IAAvB,KAA6BC,MAA7B,CAA6BA,CAA7B,YAAsC,KAAtC,SACH,4BACE,SAAS,CAAER,UAAU,CAAC,CAAEgB,IAAI,CAAJA,CAAF,CAAQC,QAAQ,CAAEf,CAAlB,CAAD,CADvB,CAEE,KAAK,yBACF,eADE,CAC0BgB,cAAc,CAACX,CAAD,CADxC,oBAEF,eAFE,CAE0BW,cAAc,CAACV,CAAD,CAFxC,IAFP,EADG,C,CAUCU,cAAc,CAAG,SAACC,CAAD,QACR,QAAb,QAAOA,EAAP,WAA2BA,CAA3B,OAAmCA,CADd,C"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import React,{useMemo}from"react";export var TabsListWrapper=function(a){var b=a.renderItemsList,c=a.items,d=useMemo(function(){return c.map(function(a,b){return b})},[c]);return React.createElement(React.Fragment,null,b({visibleIndexes:d}))};
|
|
2
|
+
//# sourceMappingURL=TabsListWrapper.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TabsListWrapper.js","names":["React","useMemo","TabsListWrapper","renderItemsList","items","visibleIndexes","map","_el","i"],"sources":["../../../../../../src/components/Tabs/TabsListWrapper/TabsListWrapper.tsx"],"sourcesContent":["import React, { useMemo } from 'react';\n\nimport { TabsFitModeWrapperProps } from '../types';\n\nexport const TabsListWrapper = <ITEM,>({\n renderItemsList,\n items,\n}: TabsFitModeWrapperProps<ITEM>) => {\n const visibleIndexes = useMemo(() => {\n return items.map((_el, i) => i);\n }, [items]);\n\n return <>{renderItemsList({ visibleIndexes })}</>;\n};\n"],"mappings":"AAAA,MAAOA,MAAP,EAAgBC,OAAhB,KAA+B,OAA/B,CAIA,MAAO,IAAMC,gBAAe,CAAG,WAGM,IAFnCC,EAEmC,GAFnCA,eAEmC,CADnCC,CACmC,GADnCA,KACmC,CAC7BC,CAAc,CAAGJ,OAAO,CAAC,UAAM,CACnC,MAAOG,EAAK,CAACE,GAAN,CAAU,SAACC,CAAD,CAAMC,CAAN,QAAYA,EAAZ,CAAV,CACR,CAF6B,CAE3B,CAACJ,CAAD,CAF2B,CADK,CAKnC,MAAO,yCAAGD,CAAe,CAAC,CAAEE,cAAc,CAAdA,CAAF,CAAD,CAAlB,CACR,CATM"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './TabsListWrapper';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../../../../../../src/components/Tabs/TabsListWrapper/index.ts"],"sourcesContent":["export * from './TabsListWrapper';\n"],"mappings":"AAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.TabsMoreItems-Button{align-items:center;display:flex}.TabsMoreItems-Content{white-space:nowrap}.TabsMoreItems-Item{padding:0 var(--space-s)}.TabsMoreItems-Item_active{background:var(--color-bg-stripe)}.TabsMoreItems-Item>*{width:100%}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import _slicedToArray from"@babel/runtime/helpers/slicedToArray";import"./TabsMoreItems.css";import{IconMeatball}from"@consta/icons/IconMeatball";import React,{forwardRef,useCallback,useEffect,useRef,useState}from"react";import{Transition}from"react-transition-group";import{Button}from"../../Button";import{ListBox}from"../../ListCanary";import{Popover}from"../../Popover/Popover";import{useFlag}from"../../../hooks/useFlag";import{useForkRef}from"../../../hooks/useForkRef";import{animateTimeout,cnMixPopoverAnimate}from"../../../mixs/MixPopoverAnimate";import{cn}from"../../../utils/bem";var cnTabsMoreItems=cn("TabsMoreItems"),TabsMoreItemsRender=function(a,b){var c=a.items,d=a.renderItem,e=a.getItemLabel,f=a.height,g=a.size,h=a.onChange,i=useFlag(!1),j=_slicedToArray(i,2),k=j[0],l=j[1],m=useRef(null),n=useRef(null),o=useState("downStartLeft"),p=_slicedToArray(o,2),q=p[0],r=p[1],s=useState(-1),t=_slicedToArray(s,2),u=t[0],v=t[1],w=useRef(-1),x=useRef(!1),y=useCallback(function(a){var b=function(){a.stopPropagation(),a.preventDefault()};if("ArrowDown"===a.key||"ArrowUp"===a.key){b();var d=w.current+("ArrowDown"===a.key?1:-1);return void v(Math.min(Math.max(d,0),c.length))}if("Enter"===a.key){if(b(),!x.current)return void l.on();var e=c[w.current];return e&&(null===h||void 0===h?void 0:h({e:a,value:e})),void l.off()}"Escape"===a.key&&(b(),l.off())},[c]);return useEffect(function(){0===c.length&&l.off()},[c]),useEffect(function(){w.current=u},[u]),useEffect(function(){x.current=k,k||v(-1)},[k]),React.createElement(React.Fragment,null,React.createElement("div",{ref:useForkRef([b,m]),className:cnTabsMoreItems("Button"),style:{height:f}},React.createElement(Button,{size:"xs",type:"button",view:"ghost",onlyIcon:!0,iconLeft:IconMeatball,onClick:l.toggle,onKeyDown:y})),React.createElement(Transition,{in:k,unmountOnExit:!0,nodeRef:n,timeout:animateTimeout},function(a){return React.createElement(Popover,{anchorRef:m,offset:-1,ref:n,direction:"downStartRight",onClickOutside:l.off,spareDirection:"downStartLeft",className:cnTabsMoreItems("Popover",[cnMixPopoverAnimate({animate:a,direction:q})]),onSetDirection:r,possibleDirections:["downStartRight","downStartLeft","upStartRight","upStartLeft","downCenter","upCenter"]},React.createElement(ListBox,{shadow:!0,border:!0,size:g,form:"default",className:cnTabsMoreItems("Content")},c.map(function(a,b){return React.createElement("div",{key:e(a),className:cnTabsMoreItems("Item",{active:u===b})},d(a,l.off,!0))})))}))};export var TabsMoreItems=forwardRef(TabsMoreItemsRender);
|
|
2
|
+
//# sourceMappingURL=TabsMoreItems.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TabsMoreItems.js","names":["IconMeatball","React","forwardRef","useCallback","useEffect","useRef","useState","Transition","Button","ListBox","Popover","useFlag","useForkRef","animateTimeout","cnMixPopoverAnimate","cn","cnTabsMoreItems","TabsMoreItemsRender","props","ref","items","renderItem","getItemLabel","height","size","onChange","isOpen","setIsOpen","buttonRef","popoverRef","direction","setDirection","highlightIndex","setHighlightIndex","highlightRef","openRef","handleKeyDown","e","preventDefault","stopPropagation","key","value","current","Math","min","max","length","on","off","toggle","animate","map","item","i","active","TabsMoreItems"],"sources":["../../../../../../src/components/Tabs/TabsMoreItems/TabsMoreItems.tsx"],"sourcesContent":["import './TabsMoreItems.css';\n\nimport { IconMeatball } from '@consta/icons/IconMeatball';\nimport React, {\n forwardRef,\n useCallback,\n useEffect,\n useRef,\n useState,\n} from 'react';\nimport { Transition } from 'react-transition-group';\n\nimport { Button } from '##/components/Button';\nimport { ListBox } from '##/components/ListCanary';\nimport { Direction, Popover } from '##/components/Popover/Popover';\nimport { useFlag } from '##/hooks/useFlag';\nimport { useForkRef } from '##/hooks/useForkRef';\nimport { animateTimeout, cnMixPopoverAnimate } from '##/mixs/MixPopoverAnimate';\nimport { cn } from '##/utils/bem';\n\nimport { TabsMoreItemsComponent, TabsMoreItemsProps } from '../types';\n\nconst cnTabsMoreItems = cn('TabsMoreItems');\n\nconst TabsMoreItemsRender = (\n props: TabsMoreItemsProps,\n ref: React.Ref<HTMLDivElement>,\n) => {\n const { items, renderItem, getItemLabel, height, size, onChange } = props;\n const [isOpen, setIsOpen] = useFlag(false);\n const buttonRef = useRef<HTMLDivElement>(null);\n const popoverRef = useRef<HTMLDivElement>(null);\n const [direction, setDirection] = useState<Direction>('downStartLeft');\n const [highlightIndex, setHighlightIndex] = useState(-1);\n\n const highlightRef: React.MutableRefObject<number> = useRef(-1);\n const openRef: React.MutableRefObject<boolean> = useRef(false);\n\n const handleKeyDown: React.KeyboardEventHandler = useCallback(\n (e) => {\n const preventDefault = () => {\n e.stopPropagation();\n e.preventDefault();\n };\n\n if (e.key === 'ArrowDown' || e.key === 'ArrowUp') {\n preventDefault();\n const value = highlightRef.current + (e.key === 'ArrowDown' ? 1 : -1);\n setHighlightIndex(Math.min(Math.max(value, 0), items.length));\n return;\n }\n if (e.key === 'Enter') {\n preventDefault();\n if (!openRef.current) {\n setIsOpen.on();\n return;\n }\n const value = items[highlightRef.current];\n value && onChange?.({ e, value });\n setIsOpen.off();\n return;\n }\n if (e.key === 'Escape') {\n preventDefault();\n setIsOpen.off();\n }\n },\n [items],\n );\n\n useEffect(() => {\n items.length === 0 && setIsOpen.off();\n }, [items]);\n\n useEffect(() => {\n highlightRef.current = highlightIndex;\n }, [highlightIndex]);\n\n useEffect(() => {\n openRef.current = isOpen;\n if (!isOpen) {\n setHighlightIndex(-1);\n }\n }, [isOpen]);\n\n return (\n <>\n <div\n ref={useForkRef([ref, buttonRef])}\n className={cnTabsMoreItems('Button')}\n style={{ height }}\n >\n <Button\n size=\"xs\"\n type=\"button\"\n view=\"ghost\"\n onlyIcon\n iconLeft={IconMeatball}\n onClick={setIsOpen.toggle}\n onKeyDown={handleKeyDown}\n />\n </div>\n <Transition\n in={isOpen}\n unmountOnExit\n nodeRef={popoverRef}\n timeout={animateTimeout}\n >\n {(animate) => (\n <Popover\n anchorRef={buttonRef}\n offset={-1}\n ref={popoverRef}\n direction=\"downStartRight\"\n onClickOutside={setIsOpen.off}\n spareDirection=\"downStartLeft\"\n className={cnTabsMoreItems('Popover', [\n cnMixPopoverAnimate({ animate, direction }),\n ])}\n onSetDirection={setDirection}\n possibleDirections={[\n 'downStartRight',\n 'downStartLeft',\n 'upStartRight',\n 'upStartLeft',\n 'downCenter',\n 'upCenter',\n ]}\n >\n <ListBox\n shadow\n border\n size={size}\n form=\"default\"\n className={cnTabsMoreItems('Content')}\n >\n {items.map((item, i) => (\n <div\n key={getItemLabel(item)}\n className={cnTabsMoreItems('Item', {\n active: highlightIndex === i,\n })}\n >\n {renderItem(item, setIsOpen.off, true)}\n </div>\n ))}\n </ListBox>\n </Popover>\n )}\n </Transition>\n </>\n );\n};\n\nexport const TabsMoreItems = forwardRef(\n TabsMoreItemsRender,\n) as TabsMoreItemsComponent;\n"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TabsTab.js","names":["React","forwardRef","ListItem","mapItemVerticalPadding","useForkRef","cnMixFocus","cn","cnTabsTab","TabsTabRender","props","ref","label","onChange","checked","size","onlyIcon","icon","iconSize","leftIcon","leftSide","tabRef","className","as","Tag","rightIcon","rightSide","disabled","renderInDropdown","otherProps","currentRef","before","toString","pV","TabsTab"],"sources":["../../../../../../src/components/Tabs/TabsTab/TabsTab.tsx"],"sourcesContent":["import './TabsTab.css';\n\nimport React, { forwardRef } from 'react';\n\nimport { ListItem, mapItemVerticalPadding } from '##/components/ListCanary';\nimport { useForkRef } from '##/hooks/useForkRef';\nimport { cnMixFocus } from '##/mixs/MixFocus';\nimport { cn } from '##/utils/bem';\n\nimport { TabsTabComponent, TabsTabProps } from '../types';\n\nexport const cnTabsTab = cn('TabsTab');\n\nconst TabsTabRender = (\n props: TabsTabProps,\n ref: React.Ref<HTMLButtonElement>,\n) => {\n const {\n label,\n onChange,\n checked,\n size,\n onlyIcon,\n icon,\n iconSize,\n leftIcon,\n leftSide,\n tabRef,\n className,\n as: Tag = 'button',\n rightIcon,\n rightSide,\n disabled,\n renderInDropdown,\n ...otherProps\n } = props;\n\n const currentRef = useForkRef([ref, tabRef]);\n\n return (\n <ListItem\n as={Tag}\n className={cnTabsTab({ checked, onlyIcon, renderInDropdown, disabled }, [\n !disabled ? cnMixFocus({ before: true }) : undefined,\n className,\n ])}\n role=\"tab\"\n type=\"button\"\n tabIndex={disabled ? -1 : undefined}\n ref={currentRef}\n title={onlyIcon ? label.toString() : undefined}\n label={onlyIcon ? undefined : label.toString()}\n onClick={checked ? undefined : onChange}\n leftIcon={onlyIcon ? leftIcon || icon || rightIcon : leftIcon || icon}\n leftSide={onlyIcon ? undefined : leftSide}\n rightIcon={onlyIcon ? undefined : rightIcon}\n rightSide={onlyIcon ? undefined : rightSide}\n iconSize={iconSize}\n disabled={disabled}\n size={size}\n space={{\n pV: mapItemVerticalPadding ? mapItemVerticalPadding[size] : 'xs',\n }}\n {...otherProps}\n />\n );\n};\n\nexport const TabsTab = forwardRef(TabsTabRender) as TabsTabComponent;\n"],"mappings":"4QAAA,sBAEA,MAAOA,MAAP,EAAgBC,UAAhB,KAAkC,OAAlC,CAEA,OAASC,QAAT,CAAmBC,sBAAnB,wBACA,OAASC,UAAT,iCACA,OAASC,UAAT,8BACA,OAASC,EAAT,0BAIA,MAAO,IAAMC,UAAS,CAAGD,EAAE,CAAC,SAAD,CAApB,CAEP,GAAME,cAAa,CAAG,SACpBC,CADoB,CAEpBC,CAFoB,CAGjB,IAEDC,EAFC,CAmBCF,CAnBD,CAEDE,KAFC,CAGDC,CAHC,CAmBCH,CAnBD,CAGDG,QAHC,CAIDC,CAJC,CAmBCJ,CAnBD,CAIDI,OAJC,CAKDC,CALC,CAmBCL,CAnBD,CAKDK,IALC,CAMDC,CANC,CAmBCN,CAnBD,CAMDM,QANC,CAODC,CAPC,CAmBCP,CAnBD,CAODO,IAPC,CAQDC,CARC,CAmBCR,CAnBD,CAQDQ,QARC,CASDC,CATC,CAmBCT,CAnBD,CASDS,QATC,CAUDC,CAVC,CAmBCV,CAnBD,CAUDU,QAVC,CAWDC,CAXC,CAmBCX,CAnBD,CAWDW,MAXC,CAYDC,CAZC,CAmBCZ,CAnBD,CAYDY,SAZC,GAmBCZ,CAnBD,CAaDa,EAbC,CAaGC,CAbH,YAaS,QAbT,GAcDC,CAdC,CAmBCf,CAnBD,CAcDe,SAdC,CAeDC,CAfC,CAmBChB,CAnBD,CAeDgB,SAfC,CAgBDC,CAhBC,CAmBCjB,CAnBD,CAgBDiB,QAhBC,CAiBDC,CAjBC,CAmBClB,CAnBD,CAiBDkB,gBAjBC,CAkBEC,CAlBF,0BAmBCnB,CAnBD,YAqBGoB,CAAU,CAAGzB,UAAU,CAAC,CAACM,CAAD,CAAMU,CAAN,CAAD,CArB1B,CAuBH,MACE,qBAAC,QAAD,gBACE,EAAE,CAAEG,CADN,CAEE,SAAS,CAAEhB,SAAS,CAAC,CAAEM,OAAO,CAAPA,CAAF,CAAWE,QAAQ,CAARA,CAAX,CAAqBY,gBAAgB,CAAhBA,CAArB,CAAuCD,QAAQ,CAARA,CAAvC,CAAD,CAAoD,CACrEA,CAAD,QAAYrB,UAAU,CAAC,CAAEyB,MAAM,GAAR,CAAD,CADgD,CAEtET,CAFsE,CAApD,CAFtB,CAME,IAAI,CAAC,KANP,CAOE,IAAI,CAAC,QAPP,CAQE,QAAQ,CAAEK,CAAQ,CAAG,CAAC,CAAJ,OARpB,CASE,GAAG,CAAEG,CATP,CAUE,KAAK,CAAEd,CAAQ,CAAGJ,CAAK,CAACoB,QAAN,EAAH,OAVjB,CAWE,KAAK,CAAEhB,CAAQ,QAAeJ,CAAK,CAACoB,QAAN,EAXhC,CAYE,OAAO,CAAElB,CAAO,QAAeD,CAZjC,CAaE,QAAQ,CAAEG,CAAQ,CAAGG,CAAQ,EAAIF,CAAZ,EAAoBQ,CAAvB,CAAmCN,CAAQ,EAAIF,CAbnE,CAcE,QAAQ,CAAED,CAAQ,QAAeI,CAdnC,CAeE,SAAS,CAAEJ,CAAQ,QAAeS,CAfpC,CAgBE,SAAS,CAAET,CAAQ,QAAeU,CAhBpC,CAiBE,QAAQ,CAAER,CAjBZ,CAkBE,QAAQ,CAAES,CAlBZ,CAmBE,IAAI,CAAEZ,CAnBR,CAoBE,KAAK,CAAE,CACLkB,EAAE,CAAE7B,sBAAsB,CAAGA,sBAAsB,CAACW,CAAD,CAAzB,CAAkC,IADvD,CApBT,EAuBMc,CAvBN,EA0BH,CArDD,CAuDA,MAAO,IAAMK,QAAO,CAAGhC,UAAU,CAACO,aAAD,CAA1B"}
|