@consta/uikit 4.12.0 → 4.14.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/__internal__/src/components/Breadcrumbs/BreadcrumbsItem/BreadcrumbsItem.js +1 -1
- package/__internal__/src/components/Breadcrumbs/BreadcrumbsItem/BreadcrumbsItem.js.map +1 -1
- package/__internal__/src/components/Breadcrumbs/BreadcrumbsMore/BreadcrumbsMore.js +1 -1
- package/__internal__/src/components/Breadcrumbs/BreadcrumbsMore/BreadcrumbsMore.js.map +1 -1
- package/__internal__/src/components/BreadcrumbsDeprecated/BreadcrumbsDeprecated.js +1 -1
- package/__internal__/src/components/BreadcrumbsDeprecated/BreadcrumbsDeprecated.js.map +1 -1
- package/__internal__/src/components/CalendarDeprecated/CalendarMonthToggler/CalendarMonthToggler.js +1 -1
- package/__internal__/src/components/CalendarDeprecated/CalendarMonthToggler/CalendarMonthToggler.js.map +1 -1
- package/__internal__/src/components/CalendarDeprecated/CalendarSlider/CalendarSlider.js +1 -1
- package/__internal__/src/components/CalendarDeprecated/CalendarSlider/CalendarSlider.js.map +1 -1
- package/__internal__/src/components/Collapse/Collapse.css +1 -1
- package/__internal__/src/components/Collapse/Collapse.d.ts +1 -2
- package/__internal__/src/components/Collapse/Collapse.js +1 -1
- package/__internal__/src/components/Collapse/Collapse.js.map +1 -1
- package/__internal__/src/components/Collapse/CollapseIcon/CollapseIcon.css +1 -1
- package/__internal__/src/components/Collapse/CollapseIcon/CollapseIcon.js +1 -1
- package/__internal__/src/components/Collapse/CollapseIcon/CollapseIcon.js.map +1 -1
- package/__internal__/src/components/Collapse/types.d.ts +7 -2
- package/__internal__/src/components/Collapse/types.js +1 -1
- package/__internal__/src/components/Collapse/types.js.map +1 -1
- package/__internal__/src/components/CollapseGroup/CollapseGroup.js +1 -1
- package/__internal__/src/components/CollapseGroup/CollapseGroup.js.map +1 -1
- package/__internal__/src/components/CollapseGroup/helpers.d.ts +7 -4
- package/__internal__/src/components/CollapseGroup/helpers.js.map +1 -1
- package/__internal__/src/components/CollapseGroup/useChoice.js +1 -1
- package/__internal__/src/components/CollapseGroup/useChoice.js.map +1 -1
- package/__internal__/src/components/DatePicker/DatePickerDropdown/DatePickerDropdown.js +1 -1
- package/__internal__/src/components/DatePicker/DatePickerDropdown/DatePickerDropdown.js.map +1 -1
- package/__internal__/src/components/DatePicker/DatePickerTypeDate/DatePickerTypeDate.js +1 -1
- package/__internal__/src/components/DatePicker/DatePickerTypeDate/DatePickerTypeDate.js.map +1 -1
- package/__internal__/src/components/DatePicker/DatePickerTypeDateRange/DatePickerTypeDateRange.js +1 -1
- package/__internal__/src/components/DatePicker/DatePickerTypeDateRange/DatePickerTypeDateRange.js.map +1 -1
- package/__internal__/src/components/DatePicker/DatePickerTypeDateTime/DatePickerTypeDateTime.js +1 -1
- package/__internal__/src/components/DatePicker/DatePickerTypeDateTime/DatePickerTypeDateTime.js.map +1 -1
- package/__internal__/src/components/DatePicker/DatePickerTypeDateTimeRange/DatePickerTypeDateTimeRange.js +1 -1
- package/__internal__/src/components/DatePicker/DatePickerTypeDateTimeRange/DatePickerTypeDateTimeRange.js.map +1 -1
- package/__internal__/src/components/DatePicker/DatePickerTypeMonth/DatePickerTypeMonth.js +1 -1
- package/__internal__/src/components/DatePicker/DatePickerTypeMonth/DatePickerTypeMonth.js.map +1 -1
- package/__internal__/src/components/DatePicker/DatePickerTypeMonthRange/DatePickerTypeMonthRange.js +1 -1
- package/__internal__/src/components/DatePicker/DatePickerTypeMonthRange/DatePickerTypeMonthRange.js.map +1 -1
- package/__internal__/src/components/DatePicker/DatePickerTypeTime/DatePickerTypeTime.js +1 -1
- package/__internal__/src/components/DatePicker/DatePickerTypeTime/DatePickerTypeTime.js.map +1 -1
- package/__internal__/src/components/DatePicker/DatePickerTypeYear/DatePickerTypeYear.js +1 -1
- package/__internal__/src/components/DatePicker/DatePickerTypeYear/DatePickerTypeYear.js.map +1 -1
- package/__internal__/src/components/DatePicker/DatePickerTypeYearRange/DatePickerTypeYearRange.js +1 -1
- package/__internal__/src/components/DatePicker/DatePickerTypeYearRange/DatePickerTypeYearRange.js.map +1 -1
- package/__internal__/src/components/DateTime/DateTimeSlider/DateTimeSlider.js +1 -1
- package/__internal__/src/components/DateTime/DateTimeSlider/DateTimeSlider.js.map +1 -1
- package/__internal__/src/components/DateTime/DateTimeToggler/DateTimeToggler.js +1 -1
- package/__internal__/src/components/DateTime/DateTimeToggler/DateTimeToggler.js.map +1 -1
- package/__internal__/src/components/Pagination/Pagination.js +1 -1
- package/__internal__/src/components/Pagination/Pagination.js.map +1 -1
- package/__internal__/src/components/ProgressStepBar/ProgressStepBar.js +1 -1
- package/__internal__/src/components/ProgressStepBar/ProgressStepBar.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/Responses404/Responses404.js +1 -1
- package/__internal__/src/components/Responses404/Responses404.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/ResponsesEmptyBox/ResponsesEmptyBox.js +1 -1
- package/__internal__/src/components/ResponsesEmptyBox/ResponsesEmptyBox.js.map +1 -1
- package/__internal__/src/components/ResponsesEmptyPockets/ResponsesEmptyPockets.js +1 -1
- package/__internal__/src/components/ResponsesEmptyPockets/ResponsesEmptyPockets.js.map +1 -1
- package/__internal__/src/components/ResponsesExit/ResponsesExit.js +1 -1
- package/__internal__/src/components/ResponsesExit/ResponsesExit.js.map +1 -1
- package/__internal__/src/components/ResponsesNothingFound/ResponsesNothingFound.js +1 -1
- package/__internal__/src/components/ResponsesNothingFound/ResponsesNothingFound.js.map +1 -1
- package/__internal__/src/components/SnackBar/SnackBarActionButton/SnackBarActionButton.js +1 -1
- package/__internal__/src/components/SnackBar/SnackBarActionButton/SnackBarActionButton.js.map +1 -1
- package/__internal__/src/components/SnackBar/SnackBarItem/SnackBarItem.js +1 -1
- package/__internal__/src/components/SnackBar/SnackBarItem/SnackBarItem.js.map +1 -1
- package/__internal__/src/components/Steps/Steps.js +1 -1
- package/__internal__/src/components/Steps/Steps.js.map +1 -1
- package/__internal__/src/components/Table/FilterContainer/TableFilterContainer.js +1 -1
- package/__internal__/src/components/Table/FilterContainer/TableFilterContainer.js.map +1 -1
- package/__internal__/src/components/Table/FilterTooltip/TableFilterTooltip.js +1 -1
- package/__internal__/src/components/Table/FilterTooltip/TableFilterTooltip.js.map +1 -1
- package/__internal__/src/components/Table/Header/TableHeader.js +1 -1
- package/__internal__/src/components/Table/Header/TableHeader.js.map +1 -1
- package/__internal__/src/components/Table/RowsCollapse/TableRowsCollapse.js +1 -1
- package/__internal__/src/components/Table/RowsCollapse/TableRowsCollapse.js.map +1 -1
- package/__internal__/src/components/Table/TextFilter/TableTextFilter.js +1 -1
- package/__internal__/src/components/Table/TextFilter/TableTextFilter.js.map +1 -1
- package/__internal__/src/components/Tabs/FitModeScrollWrapper/TabsFitModeScrollWrapper.js +1 -1
- package/__internal__/src/components/Tabs/FitModeScrollWrapper/TabsFitModeScrollWrapper.js.map +1 -1
- package/__internal__/src/components/Tabs/MoreItems/TabsMoreItems.js +1 -1
- package/__internal__/src/components/Tabs/MoreItems/TabsMoreItems.js.map +1 -1
- package/__internal__/src/components/TabsDeprecated/FitModeScrollWrapper/TabsFitModeScrollWrapper.js +1 -1
- package/__internal__/src/components/TabsDeprecated/FitModeScrollWrapper/TabsFitModeScrollWrapper.js.map +1 -1
- package/__internal__/src/components/TabsDeprecated/MoreItems/TabsMoreItems.js +1 -1
- package/__internal__/src/components/TabsDeprecated/MoreItems/TabsMoreItems.js.map +1 -1
- package/__internal__/src/components/ThemeToggler/ThemeToggler.js +1 -1
- package/__internal__/src/components/ThemeToggler/ThemeToggler.js.map +1 -1
- package/__internal__/src/components/ThemeToggler/helpers.d.ts +1 -0
- package/__internal__/src/components/ThemeToggler/types.d.ts +4 -2
- package/__internal__/src/components/ThemeToggler/types.js.map +1 -1
- package/__internal__/src/components/User/User.js +1 -1
- package/__internal__/src/components/User/User.js.map +1 -1
- package/package.json +1 -1
- package/__internal__/src/components/DatePicker/useDropdownVisible.d.ts +0 -24
- package/__internal__/src/components/DatePicker/useDropdownVisible.js +0 -2
- package/__internal__/src/components/DatePicker/useDropdownVisible.js.map +0 -1
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
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"./TableHeader.css";import React from"react";import{cn}from"../../../utils/bem";import{Button}from"../../Button/Button";import{TableCell}from"../Cell/TableCell";import{getOptionsForFilters}from"../filtering";import{TableFilterTooltip}from"../FilterTooltip/TableFilterTooltip";var cnTableHeader=cn("TableHeader");export var levelTypes=["high","low","default"];export var TableHeader=function(a){var b=a.isStickyHeader,c=a.headersWithMetaData,d=a.headerRowsHeights,f=a.headerRowsRefs,g=a.getStickyLeftOffset,h=a.stickyColumnsGrid,i=a.showVerticalCellShadow,j=a.headerVerticalAlign,k=a.getSortIcon,l=a.handleSortClick,m=a.handleFilterTogglerClick,n=a.handleCellClick,o=a.handleTooltipSave,p=a.filters,q=a.visibleFilter,r=a.selectedFilters,s=a.showHorizontalCellShadow,t=a.borderBetweenColumns,u=d.reduce(function(c,a){return c+a},0),v={"--table-header-height":"".concat(u,"px")},w=function(a){var b;return 1<=+a.position.colSpan?"high":null!==(b=a.position)&&void 0!==b&&b.smallTextSize?"low":"default"},x=function(a){var b=[],d=function(a){a.columns?a.columns.forEach(function(a){return d(c.find(function(b){return b.title===a.title}))}):b.push(a)};return d(a),b.some(function(a){return a.isResized})},y=function(a){var b,c,d,e;if(!p||!a.accessor)return null;var f=p.find(function(b){var c=b.field;return c===a.accessor}),g=null===f||void 0===f||null===(b=f.component)||void 0===b?void 0:b.name,h=null!==(c=null===f||void 0===f||null===(d=f.component)||void 0===d?void 0:d.props)&&void 0!==c?c:{},i=m(a.accessor),j=null===f||void 0===f?void 0:f.id;return a.filterable?React.createElement(TableFilterTooltip,{field:a.accessor,isOpened:q===a.accessor,options:getOptionsForFilters(p,a.accessor),values:r[a.accessor].selected||[],onChange:o,onToggle:m(a.accessor),className:cnTableHeader("Icon",{type:"filter"})},g&&React.createElement(g,Object.assign({},h,{onConfirm:function handleFilterSave(b){j&&o(a.accessor,[j],b),i()},filterValue:null===(e=r[a.accessor])||void 0===e?void 0:e.value,onCancel:m(a.accessor)}))):null},z=function(a){return a.control?React.createElement("div",{className:cnTableHeader("\u0421ontrol")},a.control({column:a})):null};return React.createElement(React.Fragment,null,React.createElement("div",{className:cnTableHeader("Row",{withVerticalBorder:t})},c.map(function(a,m){var o,p,q,r,s={};return a.position.colSpan&&(s.gridColumnEnd="span ".concat(a.position.colSpan)),a.position.rowSpan&&(s.gridRowEnd="span ".concat(a.position.rowSpan)),b&&(s.top=d.slice(0,a.position.level).reduce(function(c,a){return c+a},0)),React.createElement(TableCell,{type:"header",key:m,ref:function ref(a){f.current[m]=a},style:_objectSpread(_objectSpread({},s),{},{left:g(a.position.gridIndex,a.position.topHeaderGridIndex)}),isSticky:b,isResized:x(a),column:a,verticalAlign:j,onContextMenu:function onContextMenu(a){return n({e:a,type:"contextMenu",columnIdx:m,ref:{current:f.current[m]}})},onClick:function onClick(a){return n({e:a,type:"click",columnIdx:m,ref:{current:f.current[m]}})},className:cnTableHeader("Cell",{isFirstColumn:null===(o=a.position)||void 0===o?void 0:o.isFirst,isFirstRow:0===a.position.level,isLastInColumn:(null===(p=a.position)||void 0===p?void 0:p.topHeaderGridIndex)!==(null===(q=c[m+1])||void 0===q||null===(r=q.position)||void 0===r?void 0:r.topHeaderGridIndex),level:w(a)}),showVerticalShadow:i&&a.position.gridIndex+((null===a||void 0===a?void 0:a.position.colSpan)||1)===h},a.title,React.createElement("div",{className:cnTableHeader("Buttons",{isSortingActive:a.isSortingActive,isFilterActive:a.isFilterActive,verticalAlign:j})},a.sortable&&React.createElement(Button,{size:"xs",iconSize:"s",view:"clear",onlyIcon:!0,onClick:function onClick(){return l(a)},iconLeft:k(a),className:cnTableHeader("Icon",{type:"sort"})}),y(a),z(a)))})),React.createElement("div",{className:cnTableHeader("ShadowWrapper"),style:v},React.createElement("div",{className:cnTableHeader("Shadow",{show:s&&b})})))};
|
|
1
|
+
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"./TableHeader.css";import React from"react";import{cn}from"../../../utils/bem";import{Button}from"../../Button/Button";import{TableCell}from"../Cell/TableCell";import{getOptionsForFilters}from"../filtering";import{TableFilterTooltip}from"../FilterTooltip/TableFilterTooltip";var cnTableHeader=cn("TableHeader");export var levelTypes=["high","low","default"];export var TableHeader=function(a){var b=a.isStickyHeader,c=a.headersWithMetaData,d=a.headerRowsHeights,f=a.headerRowsRefs,g=a.getStickyLeftOffset,h=a.stickyColumnsGrid,i=a.showVerticalCellShadow,j=a.headerVerticalAlign,k=a.getSortIcon,l=a.handleSortClick,m=a.handleFilterTogglerClick,n=a.handleCellClick,o=a.handleTooltipSave,p=a.filters,q=a.visibleFilter,r=a.selectedFilters,s=a.showHorizontalCellShadow,t=a.borderBetweenColumns,u=d.reduce(function(c,a){return c+a},0),v={"--table-header-height":"".concat(u,"px")},w=function(a){var b;return 1<=+a.position.colSpan?"high":null!==(b=a.position)&&void 0!==b&&b.smallTextSize?"low":"default"},x=function(a){var b=[],d=function(a){a.columns?a.columns.forEach(function(a){return d(c.find(function(b){return b.title===a.title}))}):b.push(a)};return d(a),b.some(function(a){return a.isResized})},y=function(a){var b,c,d,e;if(!p||!a.accessor)return null;var f=p.find(function(b){var c=b.field;return c===a.accessor}),g=null===f||void 0===f||null===(b=f.component)||void 0===b?void 0:b.name,h=null!==(c=null===f||void 0===f||null===(d=f.component)||void 0===d?void 0:d.props)&&void 0!==c?c:{},i=m(a.accessor),j=null===f||void 0===f?void 0:f.id;return a.filterable?React.createElement(TableFilterTooltip,{field:a.accessor,isOpened:q===a.accessor,options:getOptionsForFilters(p,a.accessor),values:r[a.accessor].selected||[],onChange:o,onToggle:m(a.accessor),className:cnTableHeader("Icon",{type:"filter"})},g&&React.createElement(g,Object.assign({},h,{onConfirm:function handleFilterSave(b){j&&o(a.accessor,[j],b),i()},filterValue:null===(e=r[a.accessor])||void 0===e?void 0:e.value,onCancel:m(a.accessor)}))):null},z=function(a){return a.control?React.createElement("div",{className:cnTableHeader("\u0421ontrol")},a.control({column:a})):null};return React.createElement(React.Fragment,null,React.createElement("div",{className:cnTableHeader("Row",{withVerticalBorder:t})},c.map(function(a,m){var o,p,q,r,s={};return a.position.colSpan&&(s.gridColumnEnd="span ".concat(a.position.colSpan)),a.position.rowSpan&&(s.gridRowEnd="span ".concat(a.position.rowSpan)),b&&(s.top=d.slice(0,a.position.level).reduce(function(c,a){return c+a},0)),React.createElement(TableCell,{type:"header",key:m,ref:function ref(a){f.current[m]=a},style:_objectSpread(_objectSpread({},s),{},{left:g(a.position.gridIndex,a.position.topHeaderGridIndex)}),isSticky:b,isResized:x(a),column:a,verticalAlign:j,onContextMenu:function onContextMenu(a){return n({e:a,type:"contextMenu",columnIdx:m,ref:{current:f.current[m]}})},onClick:function onClick(a){return n({e:a,type:"click",columnIdx:m,ref:{current:f.current[m]}})},className:cnTableHeader("Cell",{isFirstColumn:null===(o=a.position)||void 0===o?void 0:o.isFirst,isFirstRow:0===a.position.level,isLastInColumn:(null===(p=a.position)||void 0===p?void 0:p.topHeaderGridIndex)!==(null===(q=c[m+1])||void 0===q||null===(r=q.position)||void 0===r?void 0:r.topHeaderGridIndex),level:w(a)}),showVerticalShadow:i&&a.position.gridIndex+((null===a||void 0===a?void 0:a.position.colSpan)||1)===h},a.title,React.createElement("div",{className:cnTableHeader("Buttons",{isSortingActive:a.isSortingActive,isFilterActive:a.isFilterActive,verticalAlign:j})},a.sortable&&React.createElement(Button,{type:"button",size:"xs",iconSize:"s",view:"clear",onlyIcon:!0,onClick:function onClick(){return l(a)},iconLeft:k(a),className:cnTableHeader("Icon",{type:"sort"})}),y(a),z(a)))})),React.createElement("div",{className:cnTableHeader("ShadowWrapper"),style:v},React.createElement("div",{className:cnTableHeader("Shadow",{show:s&&b})})))};
|
|
2
2
|
//# sourceMappingURL=TableHeader.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TableHeader.js","names":["React","cn","Button","TableCell","getOptionsForFilters","TableFilterTooltip","cnTableHeader","levelTypes","TableHeader","isStickyHeader","headersWithMetaData","headerRowsHeights","headerRowsRefs","getStickyLeftOffset","stickyColumnsGrid","showVerticalCellShadow","headerVerticalAlign","getSortIcon","handleSortClick","handleFilterTogglerClick","handleCellClick","handleTooltipSave","filters","visibleFilter","selectedFilters","showHorizontalCellShadow","borderBetweenColumns","tableHeaderHeight","reduce","a","b","tableHeaderStyle","getLevelType","column","position","colSpan","smallTextSize","isColumnResized","headers","build","header","columns","forEach","col","find","head","title","push","some","isResized","getFilterPopover","accessor","curFilter","field","FilterComponent","component","name","filterComponentProps","props","onToggle","filterId","id","filterable","selected","type","handleFilterSave","filterValue","value","control","withVerticalBorder","map","columnIdx","style","gridColumnEnd","rowSpan","gridRowEnd","top","slice","level","ref","current","left","gridIndex","topHeaderGridIndex","e","isFirstColumn","isFirst","isFirstRow","isLastInColumn","isSortingActive","isFilterActive","verticalAlign","sortable","show"],"sources":["../../../../../../src/components/Table/Header/TableHeader.tsx"],"sourcesContent":["import './TableHeader.css';\n\nimport React from 'react';\n\nimport { cn } from '../../../utils/bem';\nimport { Button } from '../../Button/Button';\nimport { TableCell } from '../Cell/TableCell';\nimport {\n FieldSelectedValues,\n Filters,\n getOptionsForFilters,\n SelectedFilters,\n} from '../filtering';\nimport { TableFilterTooltip } from '../FilterTooltip/TableFilterTooltip';\nimport { Header } from '../helpers';\nimport {\n ColumnMetaData,\n HeaderVerticalAlign,\n onCellClick,\n TableColumn,\n TableRow,\n} from '../Table';\n\nconst cnTableHeader = cn('TableHeader');\n\ntype TableCSSCustomProperty = {\n '--table-header-height': string;\n};\n\nexport const levelTypes = ['high', 'low', 'default'] as const;\nexport type LevelType = typeof levelTypes[number];\n\ntype Props<T extends TableRow> = {\n isStickyHeader: boolean;\n headersWithMetaData: Array<Header<T> & ColumnMetaData>;\n headerRowsHeights: Array<number>;\n headerRowsRefs: React.MutableRefObject<Record<number, HTMLDivElement | null>>;\n getStickyLeftOffset: (\n columnIndex: number,\n topHeaderGridIndex: number,\n ) => number | undefined;\n stickyColumnsGrid: number;\n showVerticalCellShadow: boolean;\n headerVerticalAlign: HeaderVerticalAlign;\n getSortIcon: (column: Header<T>) => React.FC;\n handleSortClick: (column: TableColumn<T>) => void;\n handleFilterTogglerClick: (id: string) => () => void;\n handleCellClick: onCellClick;\n handleTooltipSave: (\n field: string,\n tooltipSelectedFilters: FieldSelectedValues,\n value?: unknown,\n ) => void;\n filters: Filters<T> | undefined;\n visibleFilter: string | null;\n selectedFilters: SelectedFilters;\n showHorizontalCellShadow: boolean;\n borderBetweenColumns: boolean;\n};\n\nexport const TableHeader = <T extends TableRow>({\n isStickyHeader,\n headersWithMetaData,\n headerRowsHeights,\n headerRowsRefs,\n getStickyLeftOffset,\n stickyColumnsGrid,\n showVerticalCellShadow,\n headerVerticalAlign,\n getSortIcon,\n handleSortClick,\n handleFilterTogglerClick,\n handleCellClick,\n handleTooltipSave,\n filters,\n visibleFilter,\n selectedFilters,\n showHorizontalCellShadow,\n borderBetweenColumns,\n}: Props<T>): React.ReactElement => {\n const tableHeaderHeight = headerRowsHeights.reduce(\n (a: number, b: number) => a + b,\n 0,\n );\n const tableHeaderStyle: React.CSSProperties & TableCSSCustomProperty = {\n '--table-header-height': `${tableHeaderHeight}px`,\n };\n const getLevelType = (column: Header<T> & ColumnMetaData): LevelType => {\n if (Number(column.position!.colSpan) >= 1) return 'high';\n if (column.position?.smallTextSize) return 'low';\n return 'default';\n };\n const isColumnResized = (column: Header<T> & ColumnMetaData): boolean => {\n const headers: Array<Header<T> & ColumnMetaData> = [];\n const build = (header: Header<T> & ColumnMetaData) => {\n if (!header.columns) {\n headers.push(header);\n } else {\n header.columns.forEach((col) =>\n build(\n headersWithMetaData.find(\n (head) => head.title === col.title,\n ) as Header<T> & ColumnMetaData,\n ),\n );\n }\n };\n build(column);\n return headers.some((header) => header.isResized);\n };\n\n const getFilterPopover = (\n column: Header<T> & ColumnMetaData,\n ): React.ReactNode => {\n if (!filters || !column.accessor) {\n return null;\n }\n const curFilter = filters.find(({ field }) => field === column.accessor);\n const FilterComponent = curFilter?.component?.name;\n const filterComponentProps = curFilter?.component?.props ?? {};\n const onToggle = handleFilterTogglerClick(column.accessor);\n const filterId = curFilter?.id;\n const handleFilterSave = (filterValue?: unknown) => {\n if (filterId) {\n handleTooltipSave(column.accessor!, [filterId], filterValue);\n }\n onToggle();\n };\n\n return column.filterable ? (\n <TableFilterTooltip\n field={column.accessor}\n isOpened={visibleFilter === column.accessor}\n options={getOptionsForFilters(filters, column.accessor)}\n values={selectedFilters[column.accessor].selected || []}\n onChange={handleTooltipSave}\n onToggle={handleFilterTogglerClick(column.accessor)}\n className={cnTableHeader('Icon', { type: 'filter' })}\n >\n {FilterComponent && (\n <FilterComponent\n {...filterComponentProps}\n onConfirm={handleFilterSave}\n filterValue={selectedFilters[column.accessor]?.value}\n onCancel={handleFilterTogglerClick(column.accessor)}\n />\n )}\n </TableFilterTooltip>\n ) : null;\n };\n\n const control = (column: Header<T> & ColumnMetaData): React.ReactNode => {\n if (column.control) {\n return (\n <div className={cnTableHeader('Сontrol')}>\n {column.control({ column })}\n </div>\n );\n }\n\n return null;\n };\n\n return (\n <>\n <div\n className={cnTableHeader('Row', {\n withVerticalBorder: borderBetweenColumns,\n })}\n >\n {headersWithMetaData.map(\n (column: Header<T> & ColumnMetaData, columnIdx: number) => {\n const style: React.CSSProperties = {};\n if (column.position!.colSpan) {\n style.gridColumnEnd = `span ${column.position!.colSpan}`;\n }\n if (column.position!.rowSpan) {\n style.gridRowEnd = `span ${column.position!.rowSpan}`;\n }\n if (isStickyHeader) {\n style.top = headerRowsHeights\n .slice(0, column.position!.level)\n .reduce((a: number, b: number) => a + b, 0);\n }\n return (\n <TableCell\n type=\"header\"\n key={columnIdx}\n ref={(ref: HTMLDivElement | null): void => {\n /* eslint-disable-next-line no-param-reassign */\n headerRowsRefs.current[columnIdx] = ref;\n }}\n style={{\n ...style,\n left: getStickyLeftOffset(\n column.position!.gridIndex,\n column.position!.topHeaderGridIndex,\n ),\n }}\n isSticky={isStickyHeader}\n isResized={isColumnResized(column)}\n column={column}\n verticalAlign={headerVerticalAlign}\n onContextMenu={(e: React.SyntheticEvent) =>\n handleCellClick({\n e,\n type: 'contextMenu',\n columnIdx,\n ref: { current: headerRowsRefs.current[columnIdx] },\n })\n }\n onClick={(e: React.SyntheticEvent) =>\n handleCellClick({\n e,\n type: 'click',\n columnIdx,\n ref: { current: headerRowsRefs.current[columnIdx] },\n })\n }\n className={cnTableHeader('Cell', {\n isFirstColumn: column.position?.isFirst,\n isFirstRow: column.position!.level === 0,\n isLastInColumn:\n column.position?.topHeaderGridIndex !==\n headersWithMetaData[columnIdx + 1]?.position\n ?.topHeaderGridIndex,\n level: getLevelType(column),\n })}\n showVerticalShadow={\n showVerticalCellShadow &&\n column.position!.gridIndex! +\n (column?.position!.colSpan || 1) ===\n stickyColumnsGrid\n }\n >\n {column.title}\n\n <div\n className={cnTableHeader('Buttons', {\n isSortingActive: column.isSortingActive,\n isFilterActive: column.isFilterActive,\n verticalAlign: headerVerticalAlign,\n })}\n >\n {column.sortable && (\n <Button\n size=\"xs\"\n iconSize=\"s\"\n view=\"clear\"\n onlyIcon\n onClick={(): void => handleSortClick(column)}\n iconLeft={getSortIcon(column)}\n className={cnTableHeader('Icon', { type: 'sort' })}\n />\n )}\n\n {getFilterPopover(column)}\n\n {control(column)}\n </div>\n </TableCell>\n );\n },\n )}\n </div>\n {/*\n Рендерим тень заголовка отдельно чтобы избежать возможных наложений\n теней для ячеек заголовка и ячеек прикрепленных слева.\n */}\n <div className={cnTableHeader('ShadowWrapper')} style={tableHeaderStyle}>\n <div\n className={cnTableHeader('Shadow', {\n show: showHorizontalCellShadow && isStickyHeader,\n })}\n />\n </div>\n </>\n );\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"TableHeader.js","names":["React","cn","Button","TableCell","getOptionsForFilters","TableFilterTooltip","cnTableHeader","levelTypes","TableHeader","isStickyHeader","headersWithMetaData","headerRowsHeights","headerRowsRefs","getStickyLeftOffset","stickyColumnsGrid","showVerticalCellShadow","headerVerticalAlign","getSortIcon","handleSortClick","handleFilterTogglerClick","handleCellClick","handleTooltipSave","filters","visibleFilter","selectedFilters","showHorizontalCellShadow","borderBetweenColumns","tableHeaderHeight","reduce","a","b","tableHeaderStyle","getLevelType","column","position","colSpan","smallTextSize","isColumnResized","headers","build","header","columns","forEach","col","find","head","title","push","some","isResized","getFilterPopover","accessor","curFilter","field","FilterComponent","component","name","filterComponentProps","props","onToggle","filterId","id","filterable","selected","type","handleFilterSave","filterValue","value","control","withVerticalBorder","map","columnIdx","style","gridColumnEnd","rowSpan","gridRowEnd","top","slice","level","ref","current","left","gridIndex","topHeaderGridIndex","e","isFirstColumn","isFirst","isFirstRow","isLastInColumn","isSortingActive","isFilterActive","verticalAlign","sortable","show"],"sources":["../../../../../../src/components/Table/Header/TableHeader.tsx"],"sourcesContent":["import './TableHeader.css';\n\nimport React from 'react';\n\nimport { cn } from '../../../utils/bem';\nimport { Button } from '../../Button/Button';\nimport { TableCell } from '../Cell/TableCell';\nimport {\n FieldSelectedValues,\n Filters,\n getOptionsForFilters,\n SelectedFilters,\n} from '../filtering';\nimport { TableFilterTooltip } from '../FilterTooltip/TableFilterTooltip';\nimport { Header } from '../helpers';\nimport {\n ColumnMetaData,\n HeaderVerticalAlign,\n onCellClick,\n TableColumn,\n TableRow,\n} from '../Table';\n\nconst cnTableHeader = cn('TableHeader');\n\ntype TableCSSCustomProperty = {\n '--table-header-height': string;\n};\n\nexport const levelTypes = ['high', 'low', 'default'] as const;\nexport type LevelType = typeof levelTypes[number];\n\ntype Props<T extends TableRow> = {\n isStickyHeader: boolean;\n headersWithMetaData: Array<Header<T> & ColumnMetaData>;\n headerRowsHeights: Array<number>;\n headerRowsRefs: React.MutableRefObject<Record<number, HTMLDivElement | null>>;\n getStickyLeftOffset: (\n columnIndex: number,\n topHeaderGridIndex: number,\n ) => number | undefined;\n stickyColumnsGrid: number;\n showVerticalCellShadow: boolean;\n headerVerticalAlign: HeaderVerticalAlign;\n getSortIcon: (column: Header<T>) => React.FC;\n handleSortClick: (column: TableColumn<T>) => void;\n handleFilterTogglerClick: (id: string) => () => void;\n handleCellClick: onCellClick;\n handleTooltipSave: (\n field: string,\n tooltipSelectedFilters: FieldSelectedValues,\n value?: unknown,\n ) => void;\n filters: Filters<T> | undefined;\n visibleFilter: string | null;\n selectedFilters: SelectedFilters;\n showHorizontalCellShadow: boolean;\n borderBetweenColumns: boolean;\n};\n\nexport const TableHeader = <T extends TableRow>({\n isStickyHeader,\n headersWithMetaData,\n headerRowsHeights,\n headerRowsRefs,\n getStickyLeftOffset,\n stickyColumnsGrid,\n showVerticalCellShadow,\n headerVerticalAlign,\n getSortIcon,\n handleSortClick,\n handleFilterTogglerClick,\n handleCellClick,\n handleTooltipSave,\n filters,\n visibleFilter,\n selectedFilters,\n showHorizontalCellShadow,\n borderBetweenColumns,\n}: Props<T>): React.ReactElement => {\n const tableHeaderHeight = headerRowsHeights.reduce(\n (a: number, b: number) => a + b,\n 0,\n );\n const tableHeaderStyle: React.CSSProperties & TableCSSCustomProperty = {\n '--table-header-height': `${tableHeaderHeight}px`,\n };\n const getLevelType = (column: Header<T> & ColumnMetaData): LevelType => {\n if (Number(column.position!.colSpan) >= 1) return 'high';\n if (column.position?.smallTextSize) return 'low';\n return 'default';\n };\n const isColumnResized = (column: Header<T> & ColumnMetaData): boolean => {\n const headers: Array<Header<T> & ColumnMetaData> = [];\n const build = (header: Header<T> & ColumnMetaData) => {\n if (!header.columns) {\n headers.push(header);\n } else {\n header.columns.forEach((col) =>\n build(\n headersWithMetaData.find(\n (head) => head.title === col.title,\n ) as Header<T> & ColumnMetaData,\n ),\n );\n }\n };\n build(column);\n return headers.some((header) => header.isResized);\n };\n\n const getFilterPopover = (\n column: Header<T> & ColumnMetaData,\n ): React.ReactNode => {\n if (!filters || !column.accessor) {\n return null;\n }\n const curFilter = filters.find(({ field }) => field === column.accessor);\n const FilterComponent = curFilter?.component?.name;\n const filterComponentProps = curFilter?.component?.props ?? {};\n const onToggle = handleFilterTogglerClick(column.accessor);\n const filterId = curFilter?.id;\n const handleFilterSave = (filterValue?: unknown) => {\n if (filterId) {\n handleTooltipSave(column.accessor!, [filterId], filterValue);\n }\n onToggle();\n };\n\n return column.filterable ? (\n <TableFilterTooltip\n field={column.accessor}\n isOpened={visibleFilter === column.accessor}\n options={getOptionsForFilters(filters, column.accessor)}\n values={selectedFilters[column.accessor].selected || []}\n onChange={handleTooltipSave}\n onToggle={handleFilterTogglerClick(column.accessor)}\n className={cnTableHeader('Icon', { type: 'filter' })}\n >\n {FilterComponent && (\n <FilterComponent\n {...filterComponentProps}\n onConfirm={handleFilterSave}\n filterValue={selectedFilters[column.accessor]?.value}\n onCancel={handleFilterTogglerClick(column.accessor)}\n />\n )}\n </TableFilterTooltip>\n ) : null;\n };\n\n const control = (column: Header<T> & ColumnMetaData): React.ReactNode => {\n if (column.control) {\n return (\n <div className={cnTableHeader('Сontrol')}>\n {column.control({ column })}\n </div>\n );\n }\n\n return null;\n };\n\n return (\n <>\n <div\n className={cnTableHeader('Row', {\n withVerticalBorder: borderBetweenColumns,\n })}\n >\n {headersWithMetaData.map(\n (column: Header<T> & ColumnMetaData, columnIdx: number) => {\n const style: React.CSSProperties = {};\n if (column.position!.colSpan) {\n style.gridColumnEnd = `span ${column.position!.colSpan}`;\n }\n if (column.position!.rowSpan) {\n style.gridRowEnd = `span ${column.position!.rowSpan}`;\n }\n if (isStickyHeader) {\n style.top = headerRowsHeights\n .slice(0, column.position!.level)\n .reduce((a: number, b: number) => a + b, 0);\n }\n return (\n <TableCell\n type=\"header\"\n key={columnIdx}\n ref={(ref: HTMLDivElement | null): void => {\n /* eslint-disable-next-line no-param-reassign */\n headerRowsRefs.current[columnIdx] = ref;\n }}\n style={{\n ...style,\n left: getStickyLeftOffset(\n column.position!.gridIndex,\n column.position!.topHeaderGridIndex,\n ),\n }}\n isSticky={isStickyHeader}\n isResized={isColumnResized(column)}\n column={column}\n verticalAlign={headerVerticalAlign}\n onContextMenu={(e: React.SyntheticEvent) =>\n handleCellClick({\n e,\n type: 'contextMenu',\n columnIdx,\n ref: { current: headerRowsRefs.current[columnIdx] },\n })\n }\n onClick={(e: React.SyntheticEvent) =>\n handleCellClick({\n e,\n type: 'click',\n columnIdx,\n ref: { current: headerRowsRefs.current[columnIdx] },\n })\n }\n className={cnTableHeader('Cell', {\n isFirstColumn: column.position?.isFirst,\n isFirstRow: column.position!.level === 0,\n isLastInColumn:\n column.position?.topHeaderGridIndex !==\n headersWithMetaData[columnIdx + 1]?.position\n ?.topHeaderGridIndex,\n level: getLevelType(column),\n })}\n showVerticalShadow={\n showVerticalCellShadow &&\n column.position!.gridIndex! +\n (column?.position!.colSpan || 1) ===\n stickyColumnsGrid\n }\n >\n {column.title}\n\n <div\n className={cnTableHeader('Buttons', {\n isSortingActive: column.isSortingActive,\n isFilterActive: column.isFilterActive,\n verticalAlign: headerVerticalAlign,\n })}\n >\n {column.sortable && (\n <Button\n type=\"button\"\n size=\"xs\"\n iconSize=\"s\"\n view=\"clear\"\n onlyIcon\n onClick={(): void => handleSortClick(column)}\n iconLeft={getSortIcon(column)}\n className={cnTableHeader('Icon', { type: 'sort' })}\n />\n )}\n\n {getFilterPopover(column)}\n\n {control(column)}\n </div>\n </TableCell>\n );\n },\n )}\n </div>\n {/*\n Рендерим тень заголовка отдельно чтобы избежать возможных наложений\n теней для ячеек заголовка и ячеек прикрепленных слева.\n */}\n <div className={cnTableHeader('ShadowWrapper')} style={tableHeaderStyle}>\n <div\n className={cnTableHeader('Shadow', {\n show: showHorizontalCellShadow && isStickyHeader,\n })}\n />\n </div>\n </>\n );\n};\n"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import"./TableRowsCollapse.css";import{IconArrowDown}from"@consta/icons/IconArrowDown";import{IconArrowUp}from"@consta/icons/IconArrowUp";import React from"react";import{cn}from"../../../utils/bem";import{Button}from"../../Button/Button";export var cnTableRowsCollapse=cn("TableRowsCollapse");export var TableRowsCollapse=function(a){var b=a.level,c=a.children,d=a.isExpanded,e=a.toggleCollapse,f=a.withCollapseButton,g=a.isExpandedByDefault;return React.createElement("div",{style:{"--nesting-level":b},className:cnTableRowsCollapse()},!g&&f&&React.createElement("div",{className:cnTableRowsCollapse("buttonContainer")},React.createElement(Button,{"aria-expanded":d,iconLeft:d?IconArrowUp:IconArrowDown,iconSize:"s",onClick:e,size:"xs",onlyIcon:!0,view:"clear"})),React.createElement("div",{className:cnTableRowsCollapse("cellContainer",{withExpanderPadding:!g})},c))};
|
|
1
|
+
import"./TableRowsCollapse.css";import{IconArrowDown}from"@consta/icons/IconArrowDown";import{IconArrowUp}from"@consta/icons/IconArrowUp";import React from"react";import{cn}from"../../../utils/bem";import{Button}from"../../Button/Button";export var cnTableRowsCollapse=cn("TableRowsCollapse");export var TableRowsCollapse=function(a){var b=a.level,c=a.children,d=a.isExpanded,e=a.toggleCollapse,f=a.withCollapseButton,g=a.isExpandedByDefault;return React.createElement("div",{style:{"--nesting-level":b},className:cnTableRowsCollapse()},!g&&f&&React.createElement("div",{className:cnTableRowsCollapse("buttonContainer")},React.createElement(Button,{type:"button","aria-expanded":d,iconLeft:d?IconArrowUp:IconArrowDown,iconSize:"s",onClick:e,size:"xs",onlyIcon:!0,view:"clear"})),React.createElement("div",{className:cnTableRowsCollapse("cellContainer",{withExpanderPadding:!g})},c))};
|
|
2
2
|
//# sourceMappingURL=TableRowsCollapse.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TableRowsCollapse.js","names":["IconArrowDown","IconArrowUp","React","cn","Button","cnTableRowsCollapse","TableRowsCollapse","props","level","children","isExpanded","toggleCollapse","withCollapseButton","isExpandedByDefault","withExpanderPadding"],"sources":["../../../../../../src/components/Table/RowsCollapse/TableRowsCollapse.tsx"],"sourcesContent":["import './TableRowsCollapse.css';\n\nimport { IconArrowDown } from '@consta/icons/IconArrowDown';\nimport { IconArrowUp } from '@consta/icons/IconArrowUp';\nimport React from 'react';\n\nimport { cn } from '../../../utils/bem';\nimport { Button } from '../../Button/Button';\n\nexport type Props = {\n level: number;\n isExpandedByDefault?: boolean;\n toggleCollapse?: (e: React.SyntheticEvent) => void;\n isExpanded?: boolean;\n withCollapseButton?: boolean;\n children?: React.ReactNode;\n};\n\nexport const cnTableRowsCollapse = cn('TableRowsCollapse');\n\nexport const TableRowsCollapse: React.FC<Props> = (props) => {\n const {\n level,\n children,\n isExpanded,\n toggleCollapse,\n withCollapseButton,\n isExpandedByDefault,\n } = props;\n\n const style: React.CSSProperties & {\n '--nesting-level': number;\n } = { '--nesting-level': level };\n\n return (\n <div style={style} className={cnTableRowsCollapse()}>\n {!isExpandedByDefault && withCollapseButton && (\n <div className={cnTableRowsCollapse('buttonContainer')}>\n <Button\n aria-expanded={isExpanded}\n iconLeft={isExpanded ? IconArrowUp : IconArrowDown}\n iconSize=\"s\"\n onClick={toggleCollapse}\n size=\"xs\"\n onlyIcon\n view=\"clear\"\n />\n </div>\n )}\n <div\n className={cnTableRowsCollapse('cellContainer', {\n withExpanderPadding: !isExpandedByDefault,\n })}\n >\n {children}\n </div>\n </div>\n );\n};\n"],"mappings":"AAAA,gCAEA,OAASA,aAAT,KAA8B,6BAA9B,CACA,OAASC,WAAT,KAA4B,2BAA5B,CACA,MAAOC,MAAP,KAAkB,OAAlB,CAEA,OAASC,EAAT,0BACA,OAASC,MAAT,2BAWA,MAAO,IAAMC,oBAAmB,CAAGF,EAAE,CAAC,mBAAD,CAA9B,CAEP,MAAO,IAAMG,kBAAkC,CAAG,SAACC,CAAD,CAAW,IAEzDC,EAFyD,CAQvDD,CARuD,CAEzDC,KAFyD,CAGzDC,CAHyD,CAQvDF,CARuD,CAGzDE,QAHyD,CAIzDC,CAJyD,CAQvDH,CARuD,CAIzDG,UAJyD,CAKzDC,CALyD,CAQvDJ,CARuD,CAKzDI,cALyD,CAMzDC,CANyD,CAQvDL,CARuD,CAMzDK,kBANyD,CAOzDC,CAPyD,CAQvDN,CARuD,CAOzDM,mBAPyD,CAc3D,MACE,4BAAK,KAAK,CAHR,CAAE,kBAAmBL,CAArB,CAGF,CAAmB,SAAS,CAAEH,mBAAmB,EAAjD,EACG,CAACQ,CAAD,EAAwBD,CAAxB,EACC,2BAAK,SAAS,CAAEP,mBAAmB,CAAC,iBAAD,CAAnC,EACE,oBAAC,MAAD,EACE,
|
|
1
|
+
{"version":3,"file":"TableRowsCollapse.js","names":["IconArrowDown","IconArrowUp","React","cn","Button","cnTableRowsCollapse","TableRowsCollapse","props","level","children","isExpanded","toggleCollapse","withCollapseButton","isExpandedByDefault","withExpanderPadding"],"sources":["../../../../../../src/components/Table/RowsCollapse/TableRowsCollapse.tsx"],"sourcesContent":["import './TableRowsCollapse.css';\n\nimport { IconArrowDown } from '@consta/icons/IconArrowDown';\nimport { IconArrowUp } from '@consta/icons/IconArrowUp';\nimport React from 'react';\n\nimport { cn } from '../../../utils/bem';\nimport { Button } from '../../Button/Button';\n\nexport type Props = {\n level: number;\n isExpandedByDefault?: boolean;\n toggleCollapse?: (e: React.SyntheticEvent) => void;\n isExpanded?: boolean;\n withCollapseButton?: boolean;\n children?: React.ReactNode;\n};\n\nexport const cnTableRowsCollapse = cn('TableRowsCollapse');\n\nexport const TableRowsCollapse: React.FC<Props> = (props) => {\n const {\n level,\n children,\n isExpanded,\n toggleCollapse,\n withCollapseButton,\n isExpandedByDefault,\n } = props;\n\n const style: React.CSSProperties & {\n '--nesting-level': number;\n } = { '--nesting-level': level };\n\n return (\n <div style={style} className={cnTableRowsCollapse()}>\n {!isExpandedByDefault && withCollapseButton && (\n <div className={cnTableRowsCollapse('buttonContainer')}>\n <Button\n type=\"button\"\n aria-expanded={isExpanded}\n iconLeft={isExpanded ? IconArrowUp : IconArrowDown}\n iconSize=\"s\"\n onClick={toggleCollapse}\n size=\"xs\"\n onlyIcon\n view=\"clear\"\n />\n </div>\n )}\n <div\n className={cnTableRowsCollapse('cellContainer', {\n withExpanderPadding: !isExpandedByDefault,\n })}\n >\n {children}\n </div>\n </div>\n );\n};\n"],"mappings":"AAAA,gCAEA,OAASA,aAAT,KAA8B,6BAA9B,CACA,OAASC,WAAT,KAA4B,2BAA5B,CACA,MAAOC,MAAP,KAAkB,OAAlB,CAEA,OAASC,EAAT,0BACA,OAASC,MAAT,2BAWA,MAAO,IAAMC,oBAAmB,CAAGF,EAAE,CAAC,mBAAD,CAA9B,CAEP,MAAO,IAAMG,kBAAkC,CAAG,SAACC,CAAD,CAAW,IAEzDC,EAFyD,CAQvDD,CARuD,CAEzDC,KAFyD,CAGzDC,CAHyD,CAQvDF,CARuD,CAGzDE,QAHyD,CAIzDC,CAJyD,CAQvDH,CARuD,CAIzDG,UAJyD,CAKzDC,CALyD,CAQvDJ,CARuD,CAKzDI,cALyD,CAMzDC,CANyD,CAQvDL,CARuD,CAMzDK,kBANyD,CAOzDC,CAPyD,CAQvDN,CARuD,CAOzDM,mBAPyD,CAc3D,MACE,4BAAK,KAAK,CAHR,CAAE,kBAAmBL,CAArB,CAGF,CAAmB,SAAS,CAAEH,mBAAmB,EAAjD,EACG,CAACQ,CAAD,EAAwBD,CAAxB,EACC,2BAAK,SAAS,CAAEP,mBAAmB,CAAC,iBAAD,CAAnC,EACE,oBAAC,MAAD,EACE,IAAI,CAAC,QADP,CAEE,gBAAeK,CAFjB,CAGE,QAAQ,CAAEA,CAAU,CAAGT,WAAH,CAAiBD,aAHvC,CAIE,QAAQ,CAAC,GAJX,CAKE,OAAO,CAAEW,CALX,CAME,IAAI,CAAC,IANP,CAOE,QAAQ,GAPV,CAQE,IAAI,CAAC,OARP,EADF,CAFJ,CAeE,2BACE,SAAS,CAAEN,mBAAmB,CAAC,eAAD,CAAkB,CAC9CS,mBAAmB,CAAE,CAACD,CADwB,CAAlB,CADhC,EAKGJ,CALH,CAfF,CAwBH,CAvCM"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import _slicedToArray from"@babel/runtime/helpers/slicedToArray";import"./TableTextFilter.css";import{IconSearchStroked}from"@consta/icons/IconSearchStroked";import React,{useMemo,useState}from"react";import{cn}from"../../../utils/bem";import{Button}from"../../Button/Button";import{CheckboxGroup}from"../../CheckboxGroup";import{Text}from"../../Text/Text";import{TextField}from"../../TextField/TextField";import{TableFilterContainer}from"../FilterContainer/TableFilterContainer";var cnTextFilter=cn("TableTextFilter");export var TableTextFilter=function(a){var b=a.items,c=void 0===b?[]:b,d=a.withSearch,e=a.onConfirm,f=a.onCancel,g=a.filterValue,h=a.title,i=a.emptySearchText,j=void 0===i?"\u041D\u0438\u0447\u0435\u0433\u043E \u043D\u0435 \u043D\u0430\u0439\u0434\u0435\u043D\u043E :(":i,k=useState(null),l=_slicedToArray(k,2),m=l[0],n=l[1],o=useState(g||c),p=_slicedToArray(o,2),q=p[0],r=p[1],s=useMemo(function(){return m?c.filter(function(a){var b=a.name;return b.match(new RegExp("".concat(m),"i"))}):c},[m,c]),t=useMemo(function(){return s.length===(null===q||void 0===q?void 0:q.length)},[s,q]),u=useMemo(function(){return null===q||void 0===q?void 0:q.length},[q]);return React.createElement(TableFilterContainer,{title:h,onCancel:f,onConfirm:function confirmHandler(){n(null),e(null===q?[]:q)}},void 0!==d&&d&&React.createElement(TextField,{value:m,onChange:function onChange(a){var b=a.value;return n(b)},leftSide:IconSearchStroked,size:"s",placeholder:"\u041D\u0430\u0439\u0442\u0438 \u0432 \u0441\u043F\u0438\u0441\u043A\u0435",width:"full",className:cnTextFilter("Searchbar")}),React.createElement("div",{className:cnTextFilter("Controls")},React.createElement(Button,{size:"m",form:"brick",label:"\u0412\u044B\u0431\u0440\u0430\u0442\u044C \u0432\u0441\u0435",view:"clear",onClick:function setAll(){r(s)},disabled:!s.length||t}),React.createElement(Button,{size:"m",form:"brick",label:"\u0421\u0431\u0440\u043E\u0441\u0438\u0442\u044C",view:"clear",onClick:function resetHandler(){r(null)},disabled:!s.length||!u})),React.createElement("div",{className:cnTextFilter("Checkboxes")},s.length?React.createElement(CheckboxGroup,{items:s,value:q,getItemLabel:function getItemLabel(a){return a.name},onChange:function onChange(a){var b=a.value;r(b)},name:"checkboxGroup"}):React.createElement(Text,{lineHeight:"2xs"},j)))};
|
|
1
|
+
import _slicedToArray from"@babel/runtime/helpers/slicedToArray";import"./TableTextFilter.css";import{IconSearchStroked}from"@consta/icons/IconSearchStroked";import React,{useMemo,useState}from"react";import{cn}from"../../../utils/bem";import{Button}from"../../Button/Button";import{CheckboxGroup}from"../../CheckboxGroup";import{Text}from"../../Text/Text";import{TextField}from"../../TextField/TextField";import{TableFilterContainer}from"../FilterContainer/TableFilterContainer";var cnTextFilter=cn("TableTextFilter");export var TableTextFilter=function(a){var b=a.items,c=void 0===b?[]:b,d=a.withSearch,e=a.onConfirm,f=a.onCancel,g=a.filterValue,h=a.title,i=a.emptySearchText,j=void 0===i?"\u041D\u0438\u0447\u0435\u0433\u043E \u043D\u0435 \u043D\u0430\u0439\u0434\u0435\u043D\u043E :(":i,k=useState(null),l=_slicedToArray(k,2),m=l[0],n=l[1],o=useState(g||c),p=_slicedToArray(o,2),q=p[0],r=p[1],s=useMemo(function(){return m?c.filter(function(a){var b=a.name;return b.match(new RegExp("".concat(m),"i"))}):c},[m,c]),t=useMemo(function(){return s.length===(null===q||void 0===q?void 0:q.length)},[s,q]),u=useMemo(function(){return null===q||void 0===q?void 0:q.length},[q]);return React.createElement(TableFilterContainer,{title:h,onCancel:f,onConfirm:function confirmHandler(){n(null),e(null===q?[]:q)}},void 0!==d&&d&&React.createElement(TextField,{value:m,onChange:function onChange(a){var b=a.value;return n(b)},leftSide:IconSearchStroked,size:"s",placeholder:"\u041D\u0430\u0439\u0442\u0438 \u0432 \u0441\u043F\u0438\u0441\u043A\u0435",width:"full",className:cnTextFilter("Searchbar")}),React.createElement("div",{className:cnTextFilter("Controls")},React.createElement(Button,{size:"m",type:"button",form:"brick",label:"\u0412\u044B\u0431\u0440\u0430\u0442\u044C \u0432\u0441\u0435",view:"clear",onClick:function setAll(){r(s)},disabled:!s.length||t}),React.createElement(Button,{size:"m",form:"brick",type:"button",label:"\u0421\u0431\u0440\u043E\u0441\u0438\u0442\u044C",view:"clear",onClick:function resetHandler(){r(null)},disabled:!s.length||!u})),React.createElement("div",{className:cnTextFilter("Checkboxes")},s.length?React.createElement(CheckboxGroup,{items:s,value:q,getItemLabel:function getItemLabel(a){return a.name},onChange:function onChange(a){var b=a.value;r(b)},name:"checkboxGroup"}):React.createElement(Text,{lineHeight:"2xs"},j)))};
|
|
2
2
|
//# sourceMappingURL=TableTextFilter.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TableTextFilter.js","names":["IconSearchStroked","React","useMemo","useState","cn","Button","CheckboxGroup","Text","TextField","TableFilterContainer","cnTextFilter","TableTextFilter","items","withSearch","onConfirm","onCancel","filterValue","title","emptySearchText","searchValue","setSearchValue","checkboxGroupValue","setCheckboxGroupValue","filteredItems","filter","name","match","RegExp","isAllSelected","length","isSelected","confirmHandler","value","setAll","resetHandler","item"],"sources":["../../../../../../src/components/Table/TextFilter/TableTextFilter.tsx"],"sourcesContent":["import './TableTextFilter.css';\n\nimport { IconSearchStroked } from '@consta/icons/IconSearchStroked';\nimport React, { useMemo, useState } from 'react';\n\nimport { cn } from '../../../utils/bem';\nimport { Button } from '../../Button/Button';\nimport { CheckboxGroup } from '../../CheckboxGroup';\nimport { Text } from '../../Text/Text';\nimport { TextField } from '../../TextField/TextField';\nimport { TableFilterContainer } from '../FilterContainer/TableFilterContainer';\nimport { FilterComponentProps } from '../filtering';\n\nconst cnTextFilter = cn('TableTextFilter');\n\ntype Item = {\n name: string;\n value: string;\n};\n\ntype TableTextFilterProps = FilterComponentProps & {\n items?: Item[];\n withSearch?: boolean;\n title?: string;\n emptySearchText?: string;\n};\n\nexport const TableTextFilter: React.FC<TableTextFilterProps> = ({\n items = [],\n withSearch = false,\n onConfirm,\n onCancel,\n filterValue,\n title,\n emptySearchText = 'Ничего не найдено :(',\n}) => {\n const [searchValue, setSearchValue] = useState<string | null>(null);\n const [checkboxGroupValue, setCheckboxGroupValue] = useState<Item[] | null>(\n (filterValue as Item[]) || items,\n );\n\n const confirmHandler = () => {\n setSearchValue(null);\n onConfirm(checkboxGroupValue === null ? [] : checkboxGroupValue);\n };\n\n const resetHandler = () => {\n setCheckboxGroupValue(null);\n };\n\n const filteredItems = useMemo(() => {\n if (!searchValue) {\n return items;\n }\n\n return items.filter(({ name }) => {\n return name.match(new RegExp(`${searchValue}`, 'i'));\n });\n }, [searchValue, items]);\n\n const setAll = () => {\n setCheckboxGroupValue(filteredItems);\n };\n\n const isAllSelected = useMemo(\n () => filteredItems.length === checkboxGroupValue?.length,\n [filteredItems, checkboxGroupValue],\n );\n\n const isSelected = useMemo(\n () => checkboxGroupValue?.length,\n [checkboxGroupValue],\n );\n\n return (\n <TableFilterContainer\n title={title}\n onCancel={onCancel}\n onConfirm={confirmHandler}\n >\n {withSearch && (\n <TextField\n value={searchValue}\n onChange={({ value }) => setSearchValue(value)}\n leftSide={IconSearchStroked}\n size=\"s\"\n placeholder=\"Найти в списке\"\n width=\"full\"\n className={cnTextFilter('Searchbar')}\n />\n )}\n <div className={cnTextFilter('Controls')}>\n <Button\n size=\"m\"\n form=\"brick\"\n label=\"Выбрать все\"\n view=\"clear\"\n onClick={setAll}\n disabled={!filteredItems.length || isAllSelected}\n />\n <Button\n size=\"m\"\n form=\"brick\"\n label=\"Сбросить\"\n view=\"clear\"\n onClick={resetHandler}\n disabled={!filteredItems.length || !isSelected}\n />\n </div>\n <div className={cnTextFilter('Checkboxes')}>\n {filteredItems.length ? (\n <CheckboxGroup\n items={filteredItems}\n value={checkboxGroupValue}\n getItemLabel={(item) => item.name}\n onChange={({ value }) => {\n setCheckboxGroupValue(value);\n }}\n name=\"checkboxGroup\"\n />\n ) : (\n <Text lineHeight=\"2xs\">{emptySearchText}</Text>\n )}\n </div>\n </TableFilterContainer>\n );\n};\n"],"mappings":"iEAAA,8BAEA,OAASA,iBAAT,KAAkC,iCAAlC,CACA,MAAOC,MAAP,EAAgBC,OAAhB,CAAyBC,QAAzB,KAAyC,OAAzC,CAEA,OAASC,EAAT,0BACA,OAASC,MAAT,2BACA,OAASC,aAAT,2BACA,OAASC,IAAT,uBACA,OAASC,SAAT,iCACA,OAASC,oBAAT,+CAGA,GAAMC,aAAY,CAAGN,EAAE,CAAC,iBAAD,CAAvB,CAcA,MAAO,IAAMO,gBAA+C,CAAG,WAQzD,SAPJC,KAOI,CAPJA,CAOI,YAPI,EAOJ,OANJC,UAMI,CALJC,CAKI,GALJA,SAKI,CAJJC,CAII,GAJJA,QAII,CAHJC,CAGI,GAHJA,WAGI,CAFJC,CAEI,GAFJA,KAEI,KADJC,eACI,CADJA,CACI,YADc,iGACd,KACkCf,QAAQ,CAAgB,IAAhB,CAD1C,uBACGgB,CADH,MACgBC,CADhB,QAEgDjB,QAAQ,CACzDa,CAAD,EAA2BJ,CAD+B,CAFxD,uBAEGS,CAFH,MAEuBC,CAFvB,MAeEC,CAAa,CAAGrB,OAAO,CAAC,UAAM,OAC7BiB,EAD6B,CAK3BP,CAAK,CAACY,MAAN,CAAa,WAAc,IAAXC,EAAW,GAAXA,IAAW,CAChC,MAAOA,EAAI,CAACC,KAAL,CAAW,GAAIC,OAAJ,WAAcR,CAAd,EAA6B,GAA7B,CAAX,CACR,CAFM,CAL2B,CAEzBP,CAMV,CAR4B,CAQ1B,CAACO,CAAD,CAAcP,CAAd,CAR0B,CAfzB,CA6BEgB,CAAa,CAAG1B,OAAO,CAC3B,iBAAMqB,EAAa,CAACM,MAAd,WAAyBR,CAAzB,WAAyBA,CAAzB,QAAyBA,CAAkB,CAAEQ,MAA7C,CAAN,CAD2B,CAE3B,CAACN,CAAD,CAAgBF,CAAhB,CAF2B,CA7BzB,CAkCES,CAAU,CAAG5B,OAAO,CACxB,yBAAMmB,CAAN,WAAMA,CAAN,QAAMA,CAAkB,CAAEQ,MAA1B,CADwB,CAExB,CAACR,CAAD,CAFwB,CAlCtB,CAuCJ,MACE,qBAAC,oBAAD,EACE,KAAK,CAAEJ,CADT,CAEE,QAAQ,CAAEF,CAFZ,CAGE,SAAS,CArCU,QAAjBgB,eAAiB,EAAM,CAC3BX,CAAc,CAAC,IAAD,CADa,CAE3BN,CAAS,CAAwB,IAAvB,GAAAO,CAAkB,CAAY,EAAZ,CAAiBA,CAApC,CACV,CA+BC,EAKG,eACC,oBAAC,SAAD,EACE,KAAK,CAAEF,CADT,CAEE,QAAQ,CAAE,wBAAGa,EAAH,GAAGA,KAAH,OAAeZ,EAAc,CAACY,CAAD,CAA7B,CAFZ,CAGE,QAAQ,CAAEhC,iBAHZ,CAIE,IAAI,CAAC,GAJP,CAKE,WAAW,CAAC,4EALd,CAME,KAAK,CAAC,MANR,CAOE,SAAS,CAAEU,YAAY,CAAC,WAAD,CAPzB,EANJ,CAgBE,2BAAK,SAAS,CAAEA,YAAY,CAAC,UAAD,CAA5B,EACE,oBAAC,MAAD,EACE,IAAI,CAAC,GADP,CAEE,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"TableTextFilter.js","names":["IconSearchStroked","React","useMemo","useState","cn","Button","CheckboxGroup","Text","TextField","TableFilterContainer","cnTextFilter","TableTextFilter","items","withSearch","onConfirm","onCancel","filterValue","title","emptySearchText","searchValue","setSearchValue","checkboxGroupValue","setCheckboxGroupValue","filteredItems","filter","name","match","RegExp","isAllSelected","length","isSelected","confirmHandler","value","setAll","resetHandler","item"],"sources":["../../../../../../src/components/Table/TextFilter/TableTextFilter.tsx"],"sourcesContent":["import './TableTextFilter.css';\n\nimport { IconSearchStroked } from '@consta/icons/IconSearchStroked';\nimport React, { useMemo, useState } from 'react';\n\nimport { cn } from '../../../utils/bem';\nimport { Button } from '../../Button/Button';\nimport { CheckboxGroup } from '../../CheckboxGroup';\nimport { Text } from '../../Text/Text';\nimport { TextField } from '../../TextField/TextField';\nimport { TableFilterContainer } from '../FilterContainer/TableFilterContainer';\nimport { FilterComponentProps } from '../filtering';\n\nconst cnTextFilter = cn('TableTextFilter');\n\ntype Item = {\n name: string;\n value: string;\n};\n\ntype TableTextFilterProps = FilterComponentProps & {\n items?: Item[];\n withSearch?: boolean;\n title?: string;\n emptySearchText?: string;\n};\n\nexport const TableTextFilter: React.FC<TableTextFilterProps> = ({\n items = [],\n withSearch = false,\n onConfirm,\n onCancel,\n filterValue,\n title,\n emptySearchText = 'Ничего не найдено :(',\n}) => {\n const [searchValue, setSearchValue] = useState<string | null>(null);\n const [checkboxGroupValue, setCheckboxGroupValue] = useState<Item[] | null>(\n (filterValue as Item[]) || items,\n );\n\n const confirmHandler = () => {\n setSearchValue(null);\n onConfirm(checkboxGroupValue === null ? [] : checkboxGroupValue);\n };\n\n const resetHandler = () => {\n setCheckboxGroupValue(null);\n };\n\n const filteredItems = useMemo(() => {\n if (!searchValue) {\n return items;\n }\n\n return items.filter(({ name }) => {\n return name.match(new RegExp(`${searchValue}`, 'i'));\n });\n }, [searchValue, items]);\n\n const setAll = () => {\n setCheckboxGroupValue(filteredItems);\n };\n\n const isAllSelected = useMemo(\n () => filteredItems.length === checkboxGroupValue?.length,\n [filteredItems, checkboxGroupValue],\n );\n\n const isSelected = useMemo(\n () => checkboxGroupValue?.length,\n [checkboxGroupValue],\n );\n\n return (\n <TableFilterContainer\n title={title}\n onCancel={onCancel}\n onConfirm={confirmHandler}\n >\n {withSearch && (\n <TextField\n value={searchValue}\n onChange={({ value }) => setSearchValue(value)}\n leftSide={IconSearchStroked}\n size=\"s\"\n placeholder=\"Найти в списке\"\n width=\"full\"\n className={cnTextFilter('Searchbar')}\n />\n )}\n <div className={cnTextFilter('Controls')}>\n <Button\n size=\"m\"\n type=\"button\"\n form=\"brick\"\n label=\"Выбрать все\"\n view=\"clear\"\n onClick={setAll}\n disabled={!filteredItems.length || isAllSelected}\n />\n <Button\n size=\"m\"\n form=\"brick\"\n type=\"button\"\n label=\"Сбросить\"\n view=\"clear\"\n onClick={resetHandler}\n disabled={!filteredItems.length || !isSelected}\n />\n </div>\n <div className={cnTextFilter('Checkboxes')}>\n {filteredItems.length ? (\n <CheckboxGroup\n items={filteredItems}\n value={checkboxGroupValue}\n getItemLabel={(item) => item.name}\n onChange={({ value }) => {\n setCheckboxGroupValue(value);\n }}\n name=\"checkboxGroup\"\n />\n ) : (\n <Text lineHeight=\"2xs\">{emptySearchText}</Text>\n )}\n </div>\n </TableFilterContainer>\n );\n};\n"],"mappings":"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"}
|
|
@@ -1,2 +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]),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",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({getTabClassName:function getTabClassName(a){return cnTabsFitModeScrollWrapper("Tab",{noMargin:a===c.length-1})}})))};
|
|
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]),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({getTabClassName:function getTabClassName(a){return cnTabsFitModeScrollWrapper("Tab",{noMargin:a===c.length-1})}})))};
|
|
2
2
|
//# sourceMappingURL=TabsFitModeScrollWrapper.js.map
|
package/__internal__/src/components/Tabs/FitModeScrollWrapper/TabsFitModeScrollWrapper.js.map
CHANGED
|
@@ -1 +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","getTabClassName","noMargin"],"sources":["../../../../../../src/components/Tabs/FitModeScrollWrapper/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]),\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 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 getTabClassName: (idx) =>\n cnTabsFitModeScrollWrapper('Tab', {\n noMargin: idx === items.length - 1,\n }),\n })}\n </div>\n </div>\n );\n};\n"],"mappings":"iEAAA,uCAEA,OAASA,aAAT,KAA8B,6BAA9B,CACA,OAASC,cAAT,KAA+B,8BAA/B,CACA,MAAOC,MAAP,KAAkB,OAAlB,CAEA,OAASC,iBAAT,0DACA,OAASC,iBAAT,0DACA,OAASC,EAAT,0BACA,OAASC,MAAT,2BACA,OAASC,YAAT,CAAuBC,mBAAvB,kBAGA,GAAMC,2BAA0B,CAAGJ,EAAE,CAAC,0BAAD,CAArC,CAEA,MAAO,IAAMK,yBAAwB,CAAG,WAKwB,IAJ9DC,EAI8D,GAJ9DA,cAI8D,CAH9DC,CAG8D,GAH9DA,KAG8D,CAF9DC,CAE8D,GAF9DA,eAE8D,CAD9DC,CAC8D,GAD9DA,cAC8D,CACxDC,CAAkB,CAAGb,KAAK,CAACc,MAAN,CAA6B,IAA7B,CADmC,GAI1Db,iBAAiB,CACnBD,KAAK,CAACe,OAAN,CAAc,iBAAM,CAACF,CAAD,CAAN,CAAd,CAA0C,CAACA,CAAD,CAA1C,CADmB,CAEnB,SAACG,CAAD,cAAS,CACPC,YAAY,CAAED,CAAE,EAAIA,CAAE,CAACE,WAAH,CAAiBF,CAAE,CAACG,WADjC,CAEPC,KAAK,kBAAEJ,CAAF,WAAEA,CAAF,QAAEA,CAAE,CAAEG,WAAN,gBAAqB,CAFnB,CAGPE,WAAW,CAAEL,CAAE,CAAGM,QAAQ,CAACC,gBAAgB,CAACP,CAAD,CAAhB,CAAqBK,WAAtB,CAAmC,EAAnC,CAAX,CAAoD,CAH5D,CAAT,CAFmB,CAJyC,8BAG1DJ,CAH0D,GAG1DA,YAH0D,CAGrCO,CAHqC,GAG5CJ,KAH4C,CAGRK,CAHQ,GAGrBJ,WAHqB,GAYvCnB,iBAAiB,CAACW,CAAkB,CAACa,OAApB,CAZsB,CAYtDC,CAZsD,GAYtDA,UAZsD,GAcdrB,mBAAmB,CAAC,CAClEG,cAAc,CAAdA,CADkE,CAElEe,cAAc,CAAdA,CAFkE,CAGlEC,oBAAoB,CAApBA,CAHkE,CAIlEE,UAAU,CAAVA,CAJkE,CAAD,CAdL,uBAcvDC,CAduD,MAcnCC,CAdmC,MAqBxDC,CAAiB,CAAG,SAACC,CAAD,CAAiB,CAGzC,GAAI,EAFiBA,CAAG,EAAIH,CAAP,EAA6BG,CAAG,EAAIF,CAErD,CAAJ,CAAmB,OACXG,CAAiB,CAAG3B,YAAY,CAACI,CAAc,CAACwB,KAAf,CAAqB,CAArB,CAAwBF,CAAxB,CAAD,CADrB,WAEjBlB,CAAkB,CAACa,OAFF,qBAEjB,EAA4BQ,QAA5B,CAAqC,CACnCC,IAAI,CAAEH,CAD6B,CAEnCI,QAAQ,CAAE,QAFyB,CAArC,CAID,CACF,CA/B6D,CAiCxDC,CAAU,CAAG,UAAM,CACvBP,CAAiB,CAACF,CAAkB,CAAG,CAAtB,CAClB,CAnC6D,CAqCxDU,CAAU,CAAG,UAAM,CACvBR,CAAiB,CAACD,CAAiB,CAAG,CAArB,CAClB,CAvC6D,CA0CxDU,CAAa,CAAG7B,CAAK,CAAC8B,SAAN,CAAgB5B,CAAhB,CA1CwC,CAiD9D,MANAZ,MAAK,CAACyC,SAAN,CAAgB,UAAM,CAChBxB,CADgB,EAElBa,CAAiB,CAACS,CAAD,CAEpB,CAJD,CAIG,CAACA,CAAD,CAAgBtB,CAAhB,CAJH,CAMA,CACE,2BAAK,SAAS,CAAEV,0BAA0B,EAA1C,EACGU,CAAY,EACX,wCACI,CAAC,MAAD,CAAS,MAAT,CAAD,CAA4ByB,GAA5B,CAAgC,SAACC,CAAD,QAC/B,qBAAC,MAAD,EACE,GAAG,CAAEA,CADP,CAEE,IAAI,CAAC,OAFP,CAGE,IAAI,CAAC,
|
|
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","getTabClassName","noMargin"],"sources":["../../../../../../src/components/Tabs/FitModeScrollWrapper/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]),\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 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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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import _slicedToArray from"@babel/runtime/helpers/slicedToArray";import"./TabsMoreItems.css";import{IconMeatball}from"@consta/icons/IconMeatball";import FocusTrap from"focus-trap-react";import React,{forwardRef,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.getItemChecked,g=a.height,h=a.size,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];return useEffect(function(){0===c.length&&l.off()},[c]),React.createElement(React.Fragment,null,React.createElement("div",{ref:useForkRef([b,m]),className:cnTabsMoreItems("Button"),style:{height:g}},React.createElement(Button,{size:"xs",view:"ghost",onlyIcon:!0,iconLeft:IconMeatball,onClick:l.toggle})),React.createElement(Transition,{in:k,unmountOnExit:!0,nodeRef:n,timeout:animateTimeout},function(a){var b;return React.createElement(Popover,{anchorRef:m,offset:-1,ref:n,direction:"downStartRight",spareDirection:"downStartLeft",className:cnTabsMoreItems("Popover",[cnMixPopoverAnimate({animate:a,direction:q})]),onSetDirection:r,possibleDirections:["downStartRight","downStartLeft","upStartRight","upStartLeft","downCenter","upCenter"]},React.createElement(FocusTrap,{focusTrapOptions:{fallbackFocus:null!==(b=m.current)&&void 0!==b?b:void 0,clickOutsideDeactivates:function clickOutsideDeactivates(a){var b,c=null===(b=m.current)||void 0===b?void 0:b.contains(a.target);return!c},allowOutsideClick:!0,onDeactivate:l.off}},React.createElement(ListBox,{shadow:!0,border:!0,size:h,form:"default",className:cnTabsMoreItems("Content")},c.map(function(a){return React.createElement("div",{key:e(a),className:cnTabsMoreItems("Item",{active:f(a)})},d(a,l.off,!0))}))))}))};export var TabsMoreItems=forwardRef(TabsMoreItemsRender);
|
|
1
|
+
import _slicedToArray from"@babel/runtime/helpers/slicedToArray";import"./TabsMoreItems.css";import{IconMeatball}from"@consta/icons/IconMeatball";import FocusTrap from"focus-trap-react";import React,{forwardRef,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.getItemChecked,g=a.height,h=a.size,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];return useEffect(function(){0===c.length&&l.off()},[c]),React.createElement(React.Fragment,null,React.createElement("div",{ref:useForkRef([b,m]),className:cnTabsMoreItems("Button"),style:{height:g}},React.createElement(Button,{size:"xs",type:"button",view:"ghost",onlyIcon:!0,iconLeft:IconMeatball,onClick:l.toggle})),React.createElement(Transition,{in:k,unmountOnExit:!0,nodeRef:n,timeout:animateTimeout},function(a){var b;return React.createElement(Popover,{anchorRef:m,offset:-1,ref:n,direction:"downStartRight",spareDirection:"downStartLeft",className:cnTabsMoreItems("Popover",[cnMixPopoverAnimate({animate:a,direction:q})]),onSetDirection:r,possibleDirections:["downStartRight","downStartLeft","upStartRight","upStartLeft","downCenter","upCenter"]},React.createElement(FocusTrap,{focusTrapOptions:{fallbackFocus:null!==(b=m.current)&&void 0!==b?b:void 0,clickOutsideDeactivates:function clickOutsideDeactivates(a){var b,c=null===(b=m.current)||void 0===b?void 0:b.contains(a.target);return!c},allowOutsideClick:!0,onDeactivate:l.off}},React.createElement(ListBox,{shadow:!0,border:!0,size:h,form:"default",className:cnTabsMoreItems("Content")},c.map(function(a){return React.createElement("div",{key:e(a),className:cnTabsMoreItems("Item",{active:f(a)})},d(a,l.off,!0))}))))}))};export var TabsMoreItems=forwardRef(TabsMoreItemsRender);
|
|
2
2
|
//# sourceMappingURL=TabsMoreItems.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TabsMoreItems.js","names":["IconMeatball","FocusTrap","React","forwardRef","useEffect","useRef","useState","Transition","Button","ListBox","Popover","useFlag","useForkRef","animateTimeout","cnMixPopoverAnimate","cn","cnTabsMoreItems","TabsMoreItemsRender","props","ref","items","renderItem","getItemLabel","getItemChecked","height","size","open","setOpen","buttonRef","popoverRef","direction","setDirection","length","off","toggle","animate","fallbackFocus","current","clickOutsideDeactivates","e","isClickInsideButton","contains","target","allowOutsideClick","onDeactivate","map","item","active","TabsMoreItems"],"sources":["../../../../../../src/components/Tabs/MoreItems/TabsMoreItems.tsx"],"sourcesContent":["import './TabsMoreItems.css';\n\nimport { IconMeatball } from '@consta/icons/IconMeatball';\nimport FocusTrap from 'focus-trap-react';\nimport React, { forwardRef, useEffect, useRef, useState } 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, getItemChecked, height, size } =\n props;\n const [open, setOpen] = useFlag(false);\n const buttonRef = useRef<HTMLDivElement>(null);\n const popoverRef = useRef<HTMLDivElement>(null);\n const [direction, setDirection] = useState<Direction>('downStartLeft');\n\n useEffect(() => {\n items.length === 0 && setOpen.off();\n }, [items]);\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 view=\"ghost\"\n onlyIcon\n iconLeft={IconMeatball}\n onClick={setOpen.toggle}\n />\n </div>\n <Transition\n in={open}\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 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 <FocusTrap\n focusTrapOptions={{\n fallbackFocus: buttonRef.current ?? undefined,\n clickOutsideDeactivates: (e) => {\n const isClickInsideButton = buttonRef.current?.contains(\n e.target as Node,\n );\n return !isClickInsideButton;\n },\n allowOutsideClick: true,\n onDeactivate: setOpen.off,\n }}\n >\n <ListBox\n shadow\n border\n size={size}\n form=\"default\"\n className={cnTabsMoreItems('Content')}\n >\n {items.map((item) => (\n <div\n key={getItemLabel(item)}\n className={cnTabsMoreItems('Item', {\n active: getItemChecked(item),\n })}\n >\n {renderItem(item, setOpen.off, true)}\n </div>\n ))}\n </ListBox>\n </FocusTrap>\n </Popover>\n )}\n </Transition>\n </>\n );\n};\n\nexport const TabsMoreItems = forwardRef(\n TabsMoreItemsRender,\n) as TabsMoreItemsComponent;\n"],"mappings":"iEAAA,4BAEA,OAASA,YAAT,KAA6B,4BAA7B,CACA,MAAOC,UAAP,KAAsB,kBAAtB,CACA,MAAOC,MAAP,EAAgBC,UAAhB,CAA4BC,SAA5B,CAAuCC,MAAvC,CAA+CC,QAA/C,KAA+D,OAA/D,CACA,OAASC,UAAT,KAA2B,wBAA3B,CAEA,OAASC,MAAT,oBACA,OAASC,OAAT,wBACA,OAAoBC,OAApB,6BACA,OAASC,OAAT,8BACA,OAASC,UAAT,iCACA,OAASC,cAAT,CAAyBC,mBAAzB,uCACA,OAASC,EAAT,0B,GAIMC,gBAAe,CAAGD,EAAE,CAAC,eAAD,C,CAEpBE,mBAAmB,CAAG,SAC1BC,CAD0B,CAE1BC,CAF0B,CAGvB,IACKC,EADL,CAEDF,CAFC,CACKE,KADL,CACYC,CADZ,CAEDH,CAFC,CACYG,UADZ,CACwBC,CADxB,CAEDJ,CAFC,CACwBI,YADxB,CACsCC,CADtC,CAEDL,CAFC,CACsCK,cADtC,CACsDC,CADtD,CAEDN,CAFC,CACsDM,MADtD,CAC8DC,CAD9D,CAEDP,CAFC,CAC8DO,IAD9D,GAGqBd,OAAO,IAH5B,uBAGIe,CAHJ,MAGUC,CAHV,MAIGC,CAAS,CAAGvB,MAAM,CAAiB,IAAjB,CAJrB,CAKGwB,CAAU,CAAGxB,MAAM,CAAiB,IAAjB,CALtB,GAM+BC,QAAQ,CAAY,eAAZ,CANvC,uBAMIwB,CANJ,MAMeC,CANf,MAYH,MAJA3B,UAAS,CAAC,UAAM,CACG,CAAjB,GAAAgB,CAAK,CAACY,MAAN,EAAsBL,CAAO,CAACM,GAAR,EACvB,CAFQ,CAEN,CAACb,CAAD,CAFM,CAIT,CACE,wCACE,2BACE,GAAG,CAAER,UAAU,CAAC,CAACO,CAAD,CAAMS,CAAN,CAAD,CADjB,CAEE,SAAS,CAAEZ,eAAe,CAAC,QAAD,CAF5B,CAGE,KAAK,CAAE,CAAEQ,MAAM,CAANA,CAAF,CAHT,EAKE,oBAAC,MAAD,EACE,IAAI,CAAC,IADP,CAEE,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"TabsMoreItems.js","names":["IconMeatball","FocusTrap","React","forwardRef","useEffect","useRef","useState","Transition","Button","ListBox","Popover","useFlag","useForkRef","animateTimeout","cnMixPopoverAnimate","cn","cnTabsMoreItems","TabsMoreItemsRender","props","ref","items","renderItem","getItemLabel","getItemChecked","height","size","open","setOpen","buttonRef","popoverRef","direction","setDirection","length","off","toggle","animate","fallbackFocus","current","clickOutsideDeactivates","e","isClickInsideButton","contains","target","allowOutsideClick","onDeactivate","map","item","active","TabsMoreItems"],"sources":["../../../../../../src/components/Tabs/MoreItems/TabsMoreItems.tsx"],"sourcesContent":["import './TabsMoreItems.css';\n\nimport { IconMeatball } from '@consta/icons/IconMeatball';\nimport FocusTrap from 'focus-trap-react';\nimport React, { forwardRef, useEffect, useRef, useState } 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, getItemChecked, height, size } =\n props;\n const [open, setOpen] = useFlag(false);\n const buttonRef = useRef<HTMLDivElement>(null);\n const popoverRef = useRef<HTMLDivElement>(null);\n const [direction, setDirection] = useState<Direction>('downStartLeft');\n\n useEffect(() => {\n items.length === 0 && setOpen.off();\n }, [items]);\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={setOpen.toggle}\n />\n </div>\n <Transition\n in={open}\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 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 <FocusTrap\n focusTrapOptions={{\n fallbackFocus: buttonRef.current ?? undefined,\n clickOutsideDeactivates: (e) => {\n const isClickInsideButton = buttonRef.current?.contains(\n e.target as Node,\n );\n return !isClickInsideButton;\n },\n allowOutsideClick: true,\n onDeactivate: setOpen.off,\n }}\n >\n <ListBox\n shadow\n border\n size={size}\n form=\"default\"\n className={cnTabsMoreItems('Content')}\n >\n {items.map((item) => (\n <div\n key={getItemLabel(item)}\n className={cnTabsMoreItems('Item', {\n active: getItemChecked(item),\n })}\n >\n {renderItem(item, setOpen.off, true)}\n </div>\n ))}\n </ListBox>\n </FocusTrap>\n </Popover>\n )}\n </Transition>\n </>\n );\n};\n\nexport const TabsMoreItems = forwardRef(\n TabsMoreItemsRender,\n) as TabsMoreItemsComponent;\n"],"mappings":"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"}
|
package/__internal__/src/components/TabsDeprecated/FitModeScrollWrapper/TabsFitModeScrollWrapper.js
CHANGED
|
@@ -1,2 +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}from"../helpers";import{getVisibleTabsRange}from"./helpers";var cnTabsFitModeScrollWrapper=cn("TabsFitModeScrollWrapper");export var TabsFitModeScrollWrapper=function(a){var b=a.tabsDimensions,c=a.items,d=a.renderItemsList,e=a.getChecked,f=React.useRef(null),g=useResizeObserved(React.useMemo(function(){return[f]},[f]),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",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({getTabClassName:function getTabClassName(a){return cnTabsFitModeScrollWrapper("Tab",{noMargin:a===c.length-1})}})))};
|
|
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}from"../helpers";import{getVisibleTabsRange}from"./helpers";var cnTabsFitModeScrollWrapper=cn("TabsFitModeScrollWrapper");export var TabsFitModeScrollWrapper=function(a){var b=a.tabsDimensions,c=a.items,d=a.renderItemsList,e=a.getChecked,f=React.useRef(null),g=useResizeObserved(React.useMemo(function(){return[f]},[f]),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({getTabClassName:function getTabClassName(a){return cnTabsFitModeScrollWrapper("Tab",{noMargin:a===c.length-1})}})))};
|
|
2
2
|
//# sourceMappingURL=TabsFitModeScrollWrapper.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TabsFitModeScrollWrapper.js","names":["IconArrowLeft","IconArrowRight","React","useResizeObserved","useScrollPosition","cn","Button","getTabsWidth","getVisibleTabsRange","cnTabsFitModeScrollWrapper","TabsFitModeScrollWrapper","tabsDimensions","items","renderItemsList","getChecked","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","getTabClassName","noMargin"],"sources":["../../../../../../src/components/TabsDeprecated/FitModeScrollWrapper/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, TabsFitModeWrapperProps } from '../helpers';\nimport { getVisibleTabsRange } from './helpers';\n\nconst cnTabsFitModeScrollWrapper = cn('TabsFitModeScrollWrapper');\n\nexport const TabsFitModeScrollWrapper = <ITEM,>({\n tabsDimensions,\n items,\n renderItemsList,\n getChecked,\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]),\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(getChecked);\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 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 getTabClassName: (idx) =>\n cnTabsFitModeScrollWrapper('Tab', {\n noMargin: idx === items.length - 1,\n }),\n })}\n </div>\n </div>\n );\n};\n"],"mappings":"iEAAA,uCAEA,OAASA,aAAT,KAA8B,6BAA9B,CACA,OAASC,cAAT,KAA+B,8BAA/B,CACA,MAAOC,MAAP,KAAkB,OAAlB,CAEA,OAASC,iBAAT,0DACA,OAASC,iBAAT,0DACA,OAASC,EAAT,0BACA,OAASC,MAAT,2BACA,OAASC,YAAT,kBACA,OAASC,mBAAT,iBAEA,GAAMC,2BAA0B,CAAGJ,EAAE,CAAC,0BAAD,CAArC,CAEA,MAAO,IAAMK,yBAAwB,CAAG,WAKwB,IAJ9DC,EAI8D,GAJ9DA,cAI8D,CAH9DC,CAG8D,GAH9DA,KAG8D,CAF9DC,CAE8D,GAF9DA,eAE8D,CAD9DC,CAC8D,GAD9DA,UAC8D,CACxDC,CAAkB,CAAGb,KAAK,CAACc,MAAN,CAA6B,IAA7B,CADmC,GAI1Db,iBAAiB,CACnBD,KAAK,CAACe,OAAN,CAAc,iBAAM,CAACF,CAAD,CAAN,CAAd,CAA0C,CAACA,CAAD,CAA1C,CADmB,CAEnB,SAACG,CAAD,cAAS,CACPC,YAAY,CAAED,CAAE,EAAIA,CAAE,CAACE,WAAH,CAAiBF,CAAE,CAACG,WADjC,CAEPC,KAAK,kBAAEJ,CAAF,WAAEA,CAAF,QAAEA,CAAE,CAAEG,WAAN,gBAAqB,CAFnB,CAGPE,WAAW,CAAEL,CAAE,CAAGM,QAAQ,CAACC,gBAAgB,CAACP,CAAD,CAAhB,CAAqBK,WAAtB,CAAmC,EAAnC,CAAX,CAAoD,CAH5D,CAAT,CAFmB,CAJyC,8BAG1DJ,CAH0D,GAG1DA,YAH0D,CAGrCO,CAHqC,GAG5CJ,KAH4C,CAGRK,CAHQ,GAGrBJ,WAHqB,GAYvCnB,iBAAiB,CAACW,CAAkB,CAACa,OAApB,CAZsB,CAYtDC,CAZsD,GAYtDA,UAZsD,GAcdrB,mBAAmB,CAAC,CAClEG,cAAc,CAAdA,CADkE,CAElEe,cAAc,CAAdA,CAFkE,CAGlEC,oBAAoB,CAApBA,CAHkE,CAIlEE,UAAU,CAAVA,CAJkE,CAAD,CAdL,uBAcvDC,CAduD,MAcnCC,CAdmC,MAqBxDC,CAAiB,CAAG,SAACC,CAAD,CAAiB,CAGzC,GAAI,EAFiBA,CAAG,EAAIH,CAAP,EAA6BG,CAAG,EAAIF,CAErD,CAAJ,CAAmB,OACXG,CAAiB,CAAG3B,YAAY,CAACI,CAAc,CAACwB,KAAf,CAAqB,CAArB,CAAwBF,CAAxB,CAAD,CADrB,WAEjBlB,CAAkB,CAACa,OAFF,qBAEjB,EAA4BQ,QAA5B,CAAqC,CACnCC,IAAI,CAAEH,CAD6B,CAEnCI,QAAQ,CAAE,QAFyB,CAArC,CAID,CACF,CA/B6D,CAiCxDC,CAAU,CAAG,UAAM,CACvBP,CAAiB,CAACF,CAAkB,CAAG,CAAtB,CAClB,CAnC6D,CAqCxDU,CAAU,CAAG,UAAM,CACvBR,CAAiB,CAACD,CAAiB,CAAG,CAArB,CAClB,CAvC6D,CA0CxDU,CAAa,CAAG7B,CAAK,CAAC8B,SAAN,CAAgB5B,CAAhB,CA1CwC,CAiD9D,MANAZ,MAAK,CAACyC,SAAN,CAAgB,UAAM,CAChBxB,CADgB,EAElBa,CAAiB,CAACS,CAAD,CAEpB,CAJD,CAIG,CAACA,CAAD,CAAgBtB,CAAhB,CAJH,CAMA,CACE,2BAAK,SAAS,CAAEV,0BAA0B,EAA1C,EACGU,CAAY,EACX,wCACI,CAAC,MAAD,CAAS,MAAT,CAAD,CAA4ByB,GAA5B,CAAgC,SAACC,CAAD,QAC/B,qBAAC,MAAD,EACE,GAAG,CAAEA,CADP,CAEE,IAAI,CAAC,OAFP,CAGE,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"TabsFitModeScrollWrapper.js","names":["IconArrowLeft","IconArrowRight","React","useResizeObserved","useScrollPosition","cn","Button","getTabsWidth","getVisibleTabsRange","cnTabsFitModeScrollWrapper","TabsFitModeScrollWrapper","tabsDimensions","items","renderItemsList","getChecked","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","getTabClassName","noMargin"],"sources":["../../../../../../src/components/TabsDeprecated/FitModeScrollWrapper/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, TabsFitModeWrapperProps } from '../helpers';\nimport { getVisibleTabsRange } from './helpers';\n\nconst cnTabsFitModeScrollWrapper = cn('TabsFitModeScrollWrapper');\n\nexport const TabsFitModeScrollWrapper = <ITEM,>({\n tabsDimensions,\n items,\n renderItemsList,\n getChecked,\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]),\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(getChecked);\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 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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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import _slicedToArray from"@babel/runtime/helpers/slicedToArray";import"./TabsMoreItems.css";import{IconMeatball}from"@consta/icons/IconMeatball";import FocusTrap from"focus-trap-react";import React,{useEffect,useRef,useState}from"react";import{Transition}from"react-transition-group";import{useFlag}from"../../../hooks/useFlag/useFlag";import{useForkRef}from"../../../hooks/useForkRef/useForkRef";import{animateTimeout,cnMixPopoverAnimate}from"../../../mixs/MixPopoverAnimate/MixPopoverAnimate";import{cn}from"../../../utils/bem";import{Button}from"../../Button/Button";import{Popover}from"../../Popover/Popover";var cnTabsMoreItems=cn("TabsMoreItems");export var TabsMoreItems=React.forwardRef(function(a,b){var c=a.items,d=a.renderItem,e=a.getLabel,f=a.getChecked,g=a.height,h=useFlag(!1),i=_slicedToArray(h,2),j=i[0],k=i[1],l=k.off,m=k.toggle,n=useRef(null),o=useRef(null),p=useState("downStartLeft"),q=_slicedToArray(p,2),r=q[0],s=q[1];return useEffect(function(){0===c.length&&l()},[c]),React.createElement(React.Fragment,null,React.createElement("div",{ref:useForkRef([b,n]),className:cnTabsMoreItems("Button"),style:{height:g}},React.createElement(Button,{size:"xs",view:"ghost",onlyIcon:!0,iconLeft:IconMeatball,onClick:m})),React.createElement(Transition,{in:j,unmountOnExit:!0,nodeRef:o,timeout:animateTimeout},function(a){var b;return React.createElement(Popover,{anchorRef:n,offset:-1,ref:o,direction:"downStartRight",spareDirection:"downStartLeft",className:cnTabsMoreItems("Popover",[cnMixPopoverAnimate({animate:a,direction:r})]),onSetDirection:s,possibleDirections:["downStartRight","downStartLeft","upStartRight","upStartLeft","downCenter","upCenter"]},React.createElement(FocusTrap,{focusTrapOptions:{fallbackFocus:null!==(b=n.current)&&void 0!==b?b:void 0,clickOutsideDeactivates:function clickOutsideDeactivates(a){var b,c=null===(b=n.current)||void 0===b?void 0:b.contains(a.target);return!c},allowOutsideClick:!0,onDeactivate:l}},React.createElement("div",{className:cnTabsMoreItems("Content")},c.map(function(a){return React.createElement("div",{key:e(a),className:cnTabsMoreItems("Item",{active:f(a)})},d(a,l))}))))}))});
|
|
1
|
+
import _slicedToArray from"@babel/runtime/helpers/slicedToArray";import"./TabsMoreItems.css";import{IconMeatball}from"@consta/icons/IconMeatball";import FocusTrap from"focus-trap-react";import React,{useEffect,useRef,useState}from"react";import{Transition}from"react-transition-group";import{useFlag}from"../../../hooks/useFlag/useFlag";import{useForkRef}from"../../../hooks/useForkRef/useForkRef";import{animateTimeout,cnMixPopoverAnimate}from"../../../mixs/MixPopoverAnimate/MixPopoverAnimate";import{cn}from"../../../utils/bem";import{Button}from"../../Button/Button";import{Popover}from"../../Popover/Popover";var cnTabsMoreItems=cn("TabsMoreItems");export var TabsMoreItems=React.forwardRef(function(a,b){var c=a.items,d=a.renderItem,e=a.getLabel,f=a.getChecked,g=a.height,h=useFlag(!1),i=_slicedToArray(h,2),j=i[0],k=i[1],l=k.off,m=k.toggle,n=useRef(null),o=useRef(null),p=useState("downStartLeft"),q=_slicedToArray(p,2),r=q[0],s=q[1];return useEffect(function(){0===c.length&&l()},[c]),React.createElement(React.Fragment,null,React.createElement("div",{ref:useForkRef([b,n]),className:cnTabsMoreItems("Button"),style:{height:g}},React.createElement(Button,{size:"xs",type:"button",view:"ghost",onlyIcon:!0,iconLeft:IconMeatball,onClick:m})),React.createElement(Transition,{in:j,unmountOnExit:!0,nodeRef:o,timeout:animateTimeout},function(a){var b;return React.createElement(Popover,{anchorRef:n,offset:-1,ref:o,direction:"downStartRight",spareDirection:"downStartLeft",className:cnTabsMoreItems("Popover",[cnMixPopoverAnimate({animate:a,direction:r})]),onSetDirection:s,possibleDirections:["downStartRight","downStartLeft","upStartRight","upStartLeft","downCenter","upCenter"]},React.createElement(FocusTrap,{focusTrapOptions:{fallbackFocus:null!==(b=n.current)&&void 0!==b?b:void 0,clickOutsideDeactivates:function clickOutsideDeactivates(a){var b,c=null===(b=n.current)||void 0===b?void 0:b.contains(a.target);return!c},allowOutsideClick:!0,onDeactivate:l}},React.createElement("div",{className:cnTabsMoreItems("Content")},c.map(function(a){return React.createElement("div",{key:e(a),className:cnTabsMoreItems("Item",{active:f(a)})},d(a,l))}))))}))});
|
|
2
2
|
//# sourceMappingURL=TabsMoreItems.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TabsMoreItems.js","names":["IconMeatball","FocusTrap","React","useEffect","useRef","useState","Transition","useFlag","useForkRef","animateTimeout","cnMixPopoverAnimate","cn","Button","Popover","cnTabsMoreItems","TabsMoreItems","forwardRef","ref","items","renderItem","getLabel","getChecked","height","isOpen","off","toggle","buttonRef","popoverRef","direction","setDirection","length","animate","fallbackFocus","current","clickOutsideDeactivates","e","isClickInsideButton","contains","target","allowOutsideClick","onDeactivate","map","item","active"],"sources":["../../../../../../src/components/TabsDeprecated/MoreItems/TabsMoreItems.tsx"],"sourcesContent":["import './TabsMoreItems.css';\n\nimport { IconMeatball } from '@consta/icons/IconMeatball';\nimport FocusTrap from 'focus-trap-react';\nimport React, { useEffect, useRef, useState } from 'react';\nimport { Transition } from 'react-transition-group';\n\nimport { useFlag } from '../../../hooks/useFlag/useFlag';\nimport { useForkRef } from '../../../hooks/useForkRef/useForkRef';\nimport {\n animateTimeout,\n cnMixPopoverAnimate,\n} from '../../../mixs/MixPopoverAnimate/MixPopoverAnimate';\nimport { cn } from '../../../utils/bem';\nimport { Button } from '../../Button/Button';\nimport { Direction, Popover } from '../../Popover/Popover';\nimport { TabsPropGetLabel } from '../TabsDeprecated';\n\nconst cnTabsMoreItems = cn('TabsMoreItems');\n\ntype TabsMoreItems = <ITEM>(\n props: {\n items: ITEM[];\n renderItem: (item: ITEM, onClick: () => void) => React.ReactNode;\n getLabel: TabsPropGetLabel<ITEM>;\n getChecked: (item: ITEM) => boolean;\n height: number;\n } & React.RefAttributes<HTMLDivElement>,\n ref: React.Ref<HTMLDivElement>,\n) => React.ReactElement | null;\n\nexport const TabsMoreItems: TabsMoreItems = React.forwardRef(\n ({ items, renderItem, getLabel, getChecked, height }, ref) => {\n const [isOpen, { off, toggle }] = useFlag(false);\n const buttonRef = useRef<HTMLDivElement>(null);\n const popoverRef = useRef<HTMLDivElement>(null);\n const [direction, setDirection] = useState<Direction>('downStartLeft');\n\n useEffect(() => {\n items.length === 0 && off();\n }, [items]);\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 view=\"ghost\"\n onlyIcon\n iconLeft={IconMeatball}\n onClick={toggle}\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 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 <FocusTrap\n focusTrapOptions={{\n fallbackFocus: buttonRef.current ?? undefined,\n clickOutsideDeactivates: (e) => {\n const isClickInsideButton = buttonRef.current?.contains(\n e.target as Node,\n );\n return !isClickInsideButton;\n },\n allowOutsideClick: true,\n onDeactivate: off,\n }}\n >\n <div className={cnTabsMoreItems('Content')}>\n {items.map((item) => (\n <div\n key={getLabel(item)}\n className={cnTabsMoreItems('Item', {\n active: getChecked(item),\n })}\n >\n {renderItem(item, off)}\n </div>\n ))}\n </div>\n </FocusTrap>\n </Popover>\n )}\n </Transition>\n </>\n );\n },\n);\n"],"mappings":"iEAAA,4BAEA,OAASA,YAAT,KAA6B,4BAA7B,CACA,MAAOC,UAAP,KAAsB,kBAAtB,CACA,MAAOC,MAAP,EAAgBC,SAAhB,CAA2BC,MAA3B,CAAmCC,QAAnC,KAAmD,OAAnD,CACA,OAASC,UAAT,KAA2B,wBAA3B,CAEA,OAASC,OAAT,sCACA,OAASC,UAAT,4CACA,OACEC,cADF,CAEEC,mBAFF,yDAIA,OAASC,EAAT,0BACA,OAASC,MAAT,2BACA,OAAoBC,OAApB,6BAGA,GAAMC,gBAAe,CAAGH,EAAE,CAAC,eAAD,CAA1B,CAaA,MAAO,IAAMI,cAA4B,CAAGb,KAAK,CAACc,UAAN,CAC1C,WAAsDC,CAAtD,CAA8D,IAA3DC,EAA2D,GAA3DA,KAA2D,CAApDC,CAAoD,GAApDA,UAAoD,CAAxCC,CAAwC,GAAxCA,QAAwC,CAA9BC,CAA8B,GAA9BA,UAA8B,CAAlBC,CAAkB,GAAlBA,MAAkB,GAC1Bf,OAAO,IADmB,uBACrDgB,CADqD,aAC3CC,CAD2C,GAC3CA,GAD2C,CACtCC,CADsC,GACtCA,MADsC,CAEtDC,CAAS,CAAGtB,MAAM,CAAiB,IAAjB,CAFoC,CAGtDuB,CAAU,CAAGvB,MAAM,CAAiB,IAAjB,CAHmC,GAI1BC,QAAQ,CAAY,eAAZ,CAJkB,uBAIrDuB,CAJqD,MAI1CC,CAJ0C,MAU5D,MAJA1B,UAAS,CAAC,UAAM,CACG,CAAjB,GAAAe,CAAK,CAACY,MAAN,EAAsBN,CAAG,EAC1B,CAFQ,CAEN,CAACN,CAAD,CAFM,CAIT,CACE,wCACE,2BACE,GAAG,CAAEV,UAAU,CAAC,CAACS,CAAD,CAAMS,CAAN,CAAD,CADjB,CAEE,SAAS,CAAEZ,eAAe,CAAC,QAAD,CAF5B,CAGE,KAAK,CAAE,CAAEQ,MAAM,CAANA,CAAF,CAHT,EAKE,oBAAC,MAAD,EACE,IAAI,CAAC,IADP,CAEE,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"TabsMoreItems.js","names":["IconMeatball","FocusTrap","React","useEffect","useRef","useState","Transition","useFlag","useForkRef","animateTimeout","cnMixPopoverAnimate","cn","Button","Popover","cnTabsMoreItems","TabsMoreItems","forwardRef","ref","items","renderItem","getLabel","getChecked","height","isOpen","off","toggle","buttonRef","popoverRef","direction","setDirection","length","animate","fallbackFocus","current","clickOutsideDeactivates","e","isClickInsideButton","contains","target","allowOutsideClick","onDeactivate","map","item","active"],"sources":["../../../../../../src/components/TabsDeprecated/MoreItems/TabsMoreItems.tsx"],"sourcesContent":["import './TabsMoreItems.css';\n\nimport { IconMeatball } from '@consta/icons/IconMeatball';\nimport FocusTrap from 'focus-trap-react';\nimport React, { useEffect, useRef, useState } from 'react';\nimport { Transition } from 'react-transition-group';\n\nimport { useFlag } from '../../../hooks/useFlag/useFlag';\nimport { useForkRef } from '../../../hooks/useForkRef/useForkRef';\nimport {\n animateTimeout,\n cnMixPopoverAnimate,\n} from '../../../mixs/MixPopoverAnimate/MixPopoverAnimate';\nimport { cn } from '../../../utils/bem';\nimport { Button } from '../../Button/Button';\nimport { Direction, Popover } from '../../Popover/Popover';\nimport { TabsPropGetLabel } from '../TabsDeprecated';\n\nconst cnTabsMoreItems = cn('TabsMoreItems');\n\ntype TabsMoreItems = <ITEM>(\n props: {\n items: ITEM[];\n renderItem: (item: ITEM, onClick: () => void) => React.ReactNode;\n getLabel: TabsPropGetLabel<ITEM>;\n getChecked: (item: ITEM) => boolean;\n height: number;\n } & React.RefAttributes<HTMLDivElement>,\n ref: React.Ref<HTMLDivElement>,\n) => React.ReactElement | null;\n\nexport const TabsMoreItems: TabsMoreItems = React.forwardRef(\n ({ items, renderItem, getLabel, getChecked, height }, ref) => {\n const [isOpen, { off, toggle }] = useFlag(false);\n const buttonRef = useRef<HTMLDivElement>(null);\n const popoverRef = useRef<HTMLDivElement>(null);\n const [direction, setDirection] = useState<Direction>('downStartLeft');\n\n useEffect(() => {\n items.length === 0 && off();\n }, [items]);\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={toggle}\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 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 <FocusTrap\n focusTrapOptions={{\n fallbackFocus: buttonRef.current ?? undefined,\n clickOutsideDeactivates: (e) => {\n const isClickInsideButton = buttonRef.current?.contains(\n e.target as Node,\n );\n return !isClickInsideButton;\n },\n allowOutsideClick: true,\n onDeactivate: off,\n }}\n >\n <div className={cnTabsMoreItems('Content')}>\n {items.map((item) => (\n <div\n key={getLabel(item)}\n className={cnTabsMoreItems('Item', {\n active: getChecked(item),\n })}\n >\n {renderItem(item, off)}\n </div>\n ))}\n </div>\n </FocusTrap>\n </Popover>\n )}\n </Transition>\n </>\n );\n },\n);\n"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import _slicedToArray from"@babel/runtime/helpers/slicedToArray";import _objectWithoutProperties from"@babel/runtime/helpers/objectWithoutProperties";var _excluded=["size","items","value","onChange","getItemKey","getItemLabel","getItemIcon","direction","possibleDirections","style"];import{IconCheck}from"@consta/icons/IconCheck";import React,{forwardRef,useRef}from"react";import{
|
|
1
|
+
import _slicedToArray from"@babel/runtime/helpers/slicedToArray";import _objectWithoutProperties from"@babel/runtime/helpers/objectWithoutProperties";var _excluded=["size","items","value","onChange","getItemKey","getItemLabel","getItemIcon","direction","possibleDirections","style","view"];import{IconCheck}from"@consta/icons/IconCheck";import React,{forwardRef,useRef}from"react";import{Button}from"../Button";import{ContextMenu}from"../ContextMenu";import{usePropsHandler}from"../EventInterceptor/usePropsHandler";import{useChoiceGroup}from"../../hooks/useChoiceGroup";import{useFlag}from"../../hooks/useFlag";import{useForkRef}from"../../hooks/useForkRef";import{contextMenuSizeMap,iconSizeMap,withDefaultGetters}from"./helpers";import{themeTogglerPropSizeDefault}from"./types";export var COMPONENT_NAME="ThemeToggler";var ThemeTogglerRender=function(a,b){var c=useRef(null),d=useForkRef([c,b]),e=usePropsHandler(COMPONENT_NAME,withDefaultGetters(a),d),f=e.size,g=void 0===f?themeTogglerPropSizeDefault:f,h=e.items,i=e.value,j=e.onChange,k=e.getItemKey,l=e.getItemLabel,m=e.getItemIcon,n=e.direction,o=e.possibleDirections,p=e.style,q=e.view,r=void 0===q?"clear":q,s=_objectWithoutProperties(e,_excluded),t=useFlag(!1),u=_slicedToArray(t,2),v=u[0],w=u[1],x=useChoiceGroup({value:i,getKey:k||l,callBack:j,multiple:!1}),y=x.getOnChange,z=x.getChecked,A=iconSizeMap[g],B=contextMenuSizeMap[g];return 1>=h.length?null:React.createElement(React.Fragment,null,React.createElement(Button,Object.assign({},s,{ref:d,iconLeft:function getButtonIcon(){var a;return m(null!==(a=h.find(function(a){return z(a)}))&&void 0!==a?a:h[0])}(),onClick:function onButtonClick(a){2<h.length?w.toggle():y(h[z(h[0])?1:0])(a)},onlyIcon:!0,size:g,view:r,style:p})),2<h.length&&React.createElement(ContextMenu,{isOpen:v,offset:"s",items:h,getItemLabel:l,getItemKey:k||l,anchorRef:c,direction:n,possibleDirections:o,getItemLeftSide:function renderIcons(a){var b=m(a);if(b)return React.createElement(b,{size:A})},getItemRightSide:function renderChecks(a){if(z(a))return React.createElement(IconCheck,{size:A})},onClickOutside:w.off,onItemClick:function onItemClick(a){return y(a.item)(a.e)},size:B,style:"number"==typeof(null===p||void 0===p?void 0:p.zIndex)?{zIndex:p.zIndex+1}:void 0}))};export var ThemeToggler=forwardRef(ThemeTogglerRender);export*from"./types";
|
|
2
2
|
//# sourceMappingURL=ThemeToggler.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ThemeToggler.js","names":["IconCheck","React","forwardRef","useRef","
|
|
1
|
+
{"version":3,"file":"ThemeToggler.js","names":["IconCheck","React","forwardRef","useRef","Button","ContextMenu","usePropsHandler","useChoiceGroup","useFlag","useForkRef","contextMenuSizeMap","iconSizeMap","withDefaultGetters","themeTogglerPropSizeDefault","COMPONENT_NAME","ThemeTogglerRender","props","ref","anchorRef","buttonRef","size","items","value","onChange","getItemKey","getItemLabel","getItemIcon","direction","possibleDirections","style","view","otherProps","isOpen","setIsOpen","getKey","callBack","multiple","getOnChange","getChecked","iconSize","contextMenuSize","length","getButtonIcon","find","theme","onButtonClick","e","toggle","renderIcons","item","Icon","renderChecks","off","params","zIndex","ThemeToggler"],"sources":["../../../../../src/components/ThemeToggler/ThemeToggler.tsx"],"sourcesContent":["import { IconCheck } from '@consta/icons/IconCheck';\nimport React, { forwardRef, useRef } from 'react';\n\nimport { Button } from '##/components/Button';\nimport { ContextMenu } from '##/components/ContextMenu';\nimport { usePropsHandler } from '##/components/EventInterceptor/usePropsHandler';\nimport { useChoiceGroup } from '##/hooks/useChoiceGroup';\nimport { useFlag } from '##/hooks/useFlag';\nimport { useForkRef } from '##/hooks/useForkRef';\n\nimport { contextMenuSizeMap, iconSizeMap, withDefaultGetters } from './helpers';\nimport {\n ThemeTogglerComponent,\n ThemeTogglerProps,\n themeTogglerPropSizeDefault,\n} from './types';\n\nexport const COMPONENT_NAME = 'ThemeToggler' as const;\n\nconst ThemeTogglerRender = (\n props: ThemeTogglerProps,\n ref: React.Ref<HTMLButtonElement>,\n) => {\n const anchorRef = useRef<HTMLButtonElement>(null);\n const buttonRef = useForkRef([anchorRef, ref]);\n\n const {\n size = themeTogglerPropSizeDefault,\n items,\n value,\n onChange,\n getItemKey,\n getItemLabel,\n getItemIcon,\n direction,\n possibleDirections,\n style,\n view = 'clear',\n ...otherProps\n } = usePropsHandler(COMPONENT_NAME, withDefaultGetters(props), buttonRef);\n\n const [isOpen, setIsOpen] = useFlag(false);\n\n const { getOnChange, getChecked } = useChoiceGroup({\n value,\n getKey: getItemKey || getItemLabel,\n callBack: onChange,\n multiple: false,\n });\n\n type Item = typeof items[number];\n\n const iconSize = iconSizeMap[size];\n const contextMenuSize = contextMenuSizeMap[size];\n\n const getButtonIcon = () =>\n getItemIcon(items.find((theme) => getChecked(theme)) ?? items[0]);\n\n const onButtonClick = (e: React.MouseEvent<Element, MouseEvent>) => {\n if (items.length > 2) {\n setIsOpen.toggle();\n } else {\n getOnChange(items[getChecked(items[0]) ? 1 : 0])(e);\n }\n };\n\n const renderIcons = (item: Item) => {\n const Icon = getItemIcon(item);\n\n if (Icon) {\n return <Icon size={iconSize} />;\n }\n };\n\n const renderChecks = (item: Item) => {\n if (getChecked(item)) {\n return <IconCheck size={iconSize} />;\n }\n };\n\n if (items.length <= 1) {\n return null;\n }\n\n return (\n <>\n <Button\n {...otherProps}\n ref={buttonRef}\n iconLeft={getButtonIcon()}\n onClick={onButtonClick}\n onlyIcon\n size={size}\n view={view}\n style={style}\n />\n {items.length > 2 && (\n <ContextMenu\n isOpen={isOpen}\n offset=\"s\"\n items={items}\n getItemLabel={getItemLabel}\n getItemKey={getItemKey || getItemLabel}\n anchorRef={anchorRef}\n direction={direction}\n possibleDirections={possibleDirections}\n getItemLeftSide={renderIcons}\n getItemRightSide={renderChecks}\n onClickOutside={setIsOpen.off}\n onItemClick={(params) => getOnChange(params.item)(params.e)}\n size={contextMenuSize}\n style={\n typeof style?.zIndex === 'number'\n ? { zIndex: style.zIndex + 1 }\n : undefined\n }\n />\n )}\n </>\n );\n};\n\nexport const ThemeToggler = forwardRef(\n ThemeTogglerRender,\n) as ThemeTogglerComponent;\n\nexport * from './types';\n"],"mappings":"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"}
|
|
@@ -14,6 +14,7 @@ export declare function withDefaultGetters(props: ThemeTogglerProps): {
|
|
|
14
14
|
direction?: "downCenter" | "upCenter" | "downRight" | "downLeft" | "upRight" | "upLeft" | "leftUp" | "leftCenter" | "leftDown" | "rightUp" | "rightCenter" | "rightDown" | "downStartLeft" | "upStartLeft" | "downStartRight" | "upStartRight" | "leftStartUp" | "leftStartDown" | "rightStartUp" | "rightStartDown" | undefined;
|
|
15
15
|
possibleDirections?: readonly ("downCenter" | "upCenter" | "downRight" | "downLeft" | "upRight" | "upLeft" | "leftUp" | "leftCenter" | "leftDown" | "rightUp" | "rightCenter" | "rightDown" | "downStartLeft" | "upStartLeft" | "downStartRight" | "upStartRight" | "leftStartUp" | "leftStartDown" | "rightStartUp" | "rightStartDown")[] | undefined;
|
|
16
16
|
children?: undefined;
|
|
17
|
+
view?: "primary" | "ghost" | "clear" | "secondary" | undefined;
|
|
17
18
|
defaultChecked?: boolean | undefined;
|
|
18
19
|
defaultValue?: string | number | readonly string[] | undefined;
|
|
19
20
|
suppressContentEditableWarning?: boolean | undefined;
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
/// <reference types="react" />
|
|
2
2
|
import { IconComponent } from '@consta/icons/Icon';
|
|
3
|
-
import {
|
|
4
|
-
import { Direction } from
|
|
3
|
+
import { ButtonPropView } from "../Button";
|
|
4
|
+
import { Direction } from "../Popover";
|
|
5
|
+
import { PropsWithHTMLAttributesAndRef } from "../../utils/types/PropsWithHTMLAttributes";
|
|
5
6
|
export declare const themeTogglerPropSize: readonly ["m", "l", "s", "xs"];
|
|
6
7
|
export declare type ThemeTogglerPropSize = typeof themeTogglerPropSize[number];
|
|
7
8
|
export declare const themeTogglerPropSizeDefault: ThemeTogglerPropSize;
|
|
@@ -29,6 +30,7 @@ export declare type ThemeTogglerProps<ITEM = ThemeTogglerItemDefault> = PropsWit
|
|
|
29
30
|
direction?: Direction;
|
|
30
31
|
possibleDirections?: readonly Direction[];
|
|
31
32
|
children?: never;
|
|
33
|
+
view?: ButtonPropView;
|
|
32
34
|
}, HTMLButtonElement> & (ITEM extends {
|
|
33
35
|
key: ThemeTogglerItemDefault['key'];
|
|
34
36
|
} ? {} : {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","names":["themeTogglerPropSize","themeTogglerPropSizeDefault"],"sources":["../../../../../src/components/ThemeToggler/types.ts"],"sourcesContent":["import { IconComponent } from '@consta/icons/Icon';\n\nimport {
|
|
1
|
+
{"version":3,"file":"types.js","names":["themeTogglerPropSize","themeTogglerPropSizeDefault"],"sources":["../../../../../src/components/ThemeToggler/types.ts"],"sourcesContent":["import { IconComponent } from '@consta/icons/Icon';\n\nimport { ButtonPropView } from '##/components/Button';\nimport { Direction } from '##/components/Popover';\nimport { PropsWithHTMLAttributesAndRef } from '##/utils/types/PropsWithHTMLAttributes';\n\nexport const themeTogglerPropSize = ['m', 'l', 's', 'xs'] as const;\nexport type ThemeTogglerPropSize = typeof themeTogglerPropSize[number];\nexport const themeTogglerPropSizeDefault: ThemeTogglerPropSize =\n themeTogglerPropSize[0];\n\nexport type ThemeTogglerPropSetValue<ITEM> = (props: {\n e: React.MouseEvent;\n value: ITEM;\n}) => void;\nexport type ThemeTogglerPropGetItemKey<ITEM> = (item: ITEM) => string | number;\nexport type ThemeTogglerPropGetItemLabel<ITEM> = (item: ITEM) => string;\nexport type ThemeTogglerPropGetItemIcon<ITEM> = (item: ITEM) => IconComponent;\n\nexport type ThemeTogglerItemDefault = {\n key: string;\n label: string;\n icon: IconComponent;\n};\n\nexport type ThemeTogglerProps<ITEM = ThemeTogglerItemDefault> =\n PropsWithHTMLAttributesAndRef<\n {\n size?: ThemeTogglerPropSize;\n className?: string;\n items: ITEM[];\n value: ITEM;\n onChange: ThemeTogglerPropSetValue<ITEM>;\n getItemKey?: ThemeTogglerPropGetItemKey<ITEM>;\n getItemLabel?: ThemeTogglerPropGetItemLabel<ITEM>;\n getItemIcon?: ThemeTogglerPropGetItemIcon<ITEM>;\n direction?: Direction;\n possibleDirections?: readonly Direction[];\n children?: never;\n view?: ButtonPropView;\n },\n HTMLButtonElement\n > &\n (ITEM extends { key: ThemeTogglerItemDefault['key'] }\n ? {}\n : { getItemKey: ThemeTogglerPropGetItemLabel<ITEM> }) &\n (ITEM extends { label: ThemeTogglerItemDefault['label'] }\n ? {}\n : { getItemLabel: ThemeTogglerPropGetItemLabel<ITEM> }) &\n (ITEM extends { icon: ThemeTogglerItemDefault['icon'] }\n ? {}\n : { getItemIcon: ThemeTogglerPropGetItemIcon<ITEM> });\n\nexport type ThemeTogglerComponent = <ITEM>(\n props: ThemeTogglerProps<ITEM>,\n) => React.ReactElement | null;\n"],"mappings":"AAMA,MAAO,IAAMA,qBAAoB,CAAG,CAAC,GAAD,CAAM,GAAN,CAAW,GAAX,CAAgB,IAAhB,CAA7B,CAEP,MAAO,IAAMC,4BAAiD,CAC5DD,oBAAoB,CAAC,CAAD,CADf"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import _objectWithoutProperties from"@babel/runtime/helpers/objectWithoutProperties";var _excluded=["as","className","size","avatarUrl","name","view","width","onlyAvatar","withArrow","iconRight","onIconRightClick","info","status"];import"./User.css";import{IconSelect}from"@consta/icons/IconSelect";import React from"react";import{cn}from"../../utils/bem";import{getByMap}from"../../utils/getByMap";import{forwardRefWithAs}from"../../utils/types/PropsWithAsAttributes";import{Avatar}from"../Avatar/Avatar";import{Button}from"../Button/Button";import{Text}from"../Text/Text";export var userPropSize=["m","s","l"];export var userPropSizeDefault=userPropSize[0];export var userPropView=["clear","ghost"];export var userPropViewDefault=userPropView[0];export var userPropWidth=["default","full"];export var userPropWidthDefault=userPropWidth[0];export var userPropStatus=["available","remote","out"];export var cnUser=cn("User");var infoSizeMap={s:"2xs",m:"2xs",l:"xs"},iconSizeMap={s:"xs",m:"xs",l:"s"},avatarSizeMap={s:"xs",m:"s",l:"m"},buttonSizeMap={s:"xs",m:"xs",l:"s"};export var User=forwardRefWithAs(function(a,b){var c=a.as,d=void 0===c?"div":c,e=a.className,f=a.size,g=void 0===f?userPropSizeDefault:f,h=a.avatarUrl,i=a.name,j=a.view,k=void 0===j?userPropViewDefault:j,l=a.width,m=void 0===l?userPropWidthDefault:l,n=a.onlyAvatar,o=a.withArrow,p=a.iconRight,q=a.onIconRightClick,r=a.info,s=a.status,t=_objectWithoutProperties(a,_excluded),u=n||!i&&!r,v=p;return React.createElement(d,Object.assign({},t,{className:cnUser({size:g,view:k,width:m,withArrow:o,minified:u},[e]),ref:b}),React.createElement("div",{className:cnUser("AvatarWrapper",{status:s})},React.createElement(Avatar,{size:getByMap(avatarSizeMap,g),url:h,name:i})),!u&&(i||r)&&React.createElement("div",{className:cnUser("Block")},i&&React.createElement(Text,{className:cnUser("Name"),size:g,view:"primary",lineHeight:"2xs"},i),r&&"s"!==g&&React.createElement(Text,{className:cnUser("Info"),size:getByMap(infoSizeMap,g),view:"secondary",lineHeight:"2xs"},r)),o&&React.createElement(IconSelect,{className:cnUser("Icon"),size:getByMap(iconSizeMap,g),view:"secondary"}),v&&!q&&React.createElement(v,{className:cnUser("Icon"),size:getByMap(iconSizeMap,g),view:"secondary"}),v&&q&&React.createElement(Button,{className:cnUser("IconRightButton"),onClick:q,iconRight:v,onlyIcon:!0,view:"clear",size:getByMap(buttonSizeMap,g),form:"round"}))});
|
|
1
|
+
import _objectWithoutProperties from"@babel/runtime/helpers/objectWithoutProperties";var _excluded=["as","className","size","avatarUrl","name","view","width","onlyAvatar","withArrow","iconRight","onIconRightClick","info","status"];import"./User.css";import{IconSelect}from"@consta/icons/IconSelect";import React from"react";import{cn}from"../../utils/bem";import{getByMap}from"../../utils/getByMap";import{forwardRefWithAs}from"../../utils/types/PropsWithAsAttributes";import{Avatar}from"../Avatar/Avatar";import{Button}from"../Button/Button";import{Text}from"../Text/Text";export var userPropSize=["m","s","l"];export var userPropSizeDefault=userPropSize[0];export var userPropView=["clear","ghost"];export var userPropViewDefault=userPropView[0];export var userPropWidth=["default","full"];export var userPropWidthDefault=userPropWidth[0];export var userPropStatus=["available","remote","out"];export var cnUser=cn("User");var infoSizeMap={s:"2xs",m:"2xs",l:"xs"},iconSizeMap={s:"xs",m:"xs",l:"s"},avatarSizeMap={s:"xs",m:"s",l:"m"},buttonSizeMap={s:"xs",m:"xs",l:"s"};export var User=forwardRefWithAs(function(a,b){var c=a.as,d=void 0===c?"div":c,e=a.className,f=a.size,g=void 0===f?userPropSizeDefault:f,h=a.avatarUrl,i=a.name,j=a.view,k=void 0===j?userPropViewDefault:j,l=a.width,m=void 0===l?userPropWidthDefault:l,n=a.onlyAvatar,o=a.withArrow,p=a.iconRight,q=a.onIconRightClick,r=a.info,s=a.status,t=_objectWithoutProperties(a,_excluded),u=n||!i&&!r,v=p;return React.createElement(d,Object.assign({},t,{className:cnUser({size:g,view:k,width:m,withArrow:o,minified:u},[e]),ref:b}),React.createElement("div",{className:cnUser("AvatarWrapper",{status:s})},React.createElement(Avatar,{size:getByMap(avatarSizeMap,g),url:h,name:i})),!u&&(i||r)&&React.createElement("div",{className:cnUser("Block")},i&&React.createElement(Text,{className:cnUser("Name"),size:g,view:"primary",lineHeight:"2xs"},i),r&&"s"!==g&&React.createElement(Text,{className:cnUser("Info"),size:getByMap(infoSizeMap,g),view:"secondary",lineHeight:"2xs"},r)),o&&React.createElement(IconSelect,{className:cnUser("Icon"),size:getByMap(iconSizeMap,g),view:"secondary"}),v&&!q&&React.createElement(v,{className:cnUser("Icon"),size:getByMap(iconSizeMap,g),view:"secondary"}),v&&q&&React.createElement(Button,{className:cnUser("IconRightButton"),onClick:q,iconRight:v,onlyIcon:!0,type:"button",view:"clear",size:getByMap(buttonSizeMap,g),form:"round"}))});
|
|
2
2
|
//# sourceMappingURL=User.js.map
|