@join-x5/react-data-grid-settings 1.1.4-nightly → 1.2.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/dist/Area/index.es.js.map +1 -1
- package/dist/AreaItem/AreaItem.es.js +8 -8
- package/dist/AreaItem/AreaItem.es.js.map +1 -1
- package/dist/AreaItem/Content.es.js +8 -8
- package/dist/AreaItem/Content.es.js.map +1 -1
- package/dist/AreaItem/Handle.es.js.map +1 -1
- package/dist/AreaItem/ItemContent.es.js +4 -4
- package/dist/AreaItem/ItemContent.es.js.map +1 -1
- package/dist/AreaItem/Visibility.es.js.map +1 -1
- package/dist/AreaItem/index.es.js.map +1 -1
- package/dist/Columns/hook.es.js +32 -32
- package/dist/Columns/hook.es.js.map +1 -1
- package/dist/Columns/index.es.js.map +1 -1
- package/dist/Columns/utils.es.js +4 -4
- package/dist/Columns/utils.es.js.map +1 -1
- package/dist/DataGridSettings.es.js.map +1 -1
- package/dist/DataGridSettingsContext.es.js.map +1 -1
- package/dist/Footer/LeftButtons.es.js.map +1 -1
- package/dist/Footer/index.es.js.map +1 -1
- package/dist/Search/index.es.js.map +1 -1
- package/dist/index.cjs +3 -3
- package/dist/index.cjs.map +1 -1
- package/dist/types.es.js.map +1 -1
- package/dist/utils.es.js.map +1 -1
- package/package.json +7 -7
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","sources":["../src/DataGridSettingsContext.ts","../src/types.ts","../src/AreaItem/Content.tsx","../src/AreaItem/Handle.tsx","../src/AreaItem/Visibility.tsx","../src/AreaItem/ItemContent.tsx","../src/AreaItem/AreaItem.tsx","../src/AreaItem/index.tsx","../src/Area/index.tsx","../src/Search/index.tsx","../src/Columns/utils.ts","../src/Columns/hook.ts","../src/Columns/index.tsx","../src/Footer/LeftButtons.tsx","../src/Footer/index.tsx","../src/utils.ts","../src/DataGridSettings.tsx"],"sourcesContent":["'use client';\n\nimport {createContext} from 'react';\n\nimport type {ColumnArea, ColumnItem, ColumnData, DataGridSettingsProps, ItemsById, ColumnItemId} from './types';\nimport type {RequiredQA} from '@join-x5/react-theme';\n\ntype DataGridSettingsContextProps = {\n columns: ColumnData[];\n itemsById: ItemsById;\n areas: ColumnArea[];\n\n setItems: (newItems: ColumnItem[]) => void;\n\n searchItems: ColumnItemId[];\n setSearchItems: (newSearchItems: ColumnItemId[]) => void;\n} & Pick<DataGridSettingsProps, 'setIsOpen' | 'items' | 'defaultItems' | 'onSave'> &\n RequiredQA;\n\nexport const DataGridSettingsContext = createContext<DataGridSettingsContextProps>({\n items: [],\n defaultItems: [],\n areas: [],\n columns: [],\n itemsById: new Map(),\n searchItems: [],\n setSearchItems: () => {},\n\n setIsOpen: () => {},\n setItems: () => {},\n onSave: () => {},\n qa: '',\n});\n","import type {ReactNode} from 'react';\nimport type {QA} from '@join-x5/react-theme';\n\nexport enum ColumnArea {\n /** Не закреплен */\n Default = 'default',\n\n /** Закреплен слева */\n FixedLeft = 'fixedLeft',\n\n /** Закреплен справа */\n FixedRight = 'fixedRight',\n}\n\n/** Идентификатор колонки */\nexport type ColumnItemId = string | number;\n\nexport type ColumnItem = {\n /** Идентификатор */\n id: ColumnItemId;\n\n /** Название\n *\n * Используется при поиске\n */\n name: string;\n\n /** Контент\n *\n * Текстовый контент сокращается через text-overflow: ellipsis\n */\n title: ReactNode;\n\n /** Область элемента */\n area: ColumnArea;\n\n /** Расположение элемента */\n sort: number;\n\n /** Видимость */\n isVisible: boolean;\n\n /** Всегда видим */\n isAlwaysVisible: boolean;\n\n /** Закреплен\n *\n * Сохраняет свою позицию\n */\n isLocked: boolean;\n};\n\nexport type DataGridSettingsProps = {\n /** Раскрыта ли модалка */\n isOpen: boolean;\n\n /** Обработчик раскрытия модалки */\n setIsOpen: (newIsOpen: boolean) => void;\n\n /** Элементы списка */\n items: ColumnItem[];\n\n /** Элементы по умолчанию\n *\n * Используется при нажатии кнопки \"По умолчанию\"\n */\n defaultItems: ColumnItem[];\n\n /** Доступные области\n *\n * По умолчанию [ColumnArea.FixedLeft, ColumnArea.Default]\n */\n areas?: ColumnArea[];\n\n /** Обработчик сохранения изменений */\n onSave: (newItems: ColumnItem[]) => void;\n} & QA;\n\nexport type DataGridSettingsActiveItem = {\n overId?: ColumnItemId;\n isAbove?: boolean;\n} & ColumnItem;\n\nexport type ColumnData = Map<ColumnArea, ColumnItemId[]>;\nexport type ItemsById = Map<ColumnItemId, ColumnItem>;\n","'use client';\n\nimport {useEffect, useRef, useState} from 'react';\nimport styled from '@emotion/styled';\n\nimport {Placement} from '@join-x5/react-theme';\nimport {Tooltip} from '@join-x5/react';\n\nimport type {ColumnItem} from '../types';\n\nconst Container = styled.div<Pick<ColumnItem, 'isVisible'>>`\n flex-grow: 1;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n user-select: none;\n color: ${props => props.theme.colors.grey[props.isVisible ? 100 : 40]};\n\n ${props => props.theme.typography.p1}\n`;\ntype ContentProps = {item: ColumnItem};\n\nexport const Content: React.FC<ContentProps> = ({item: {name, title, isVisible}}) => {\n const [isOverflown, setIsOverflown] = useState<boolean>(false);\n const ref = useRef<HTMLInputElement>(null);\n\n const noTooltip = !isOverflown ? false : undefined;\n\n useEffect(() => {\n if (!ref.current) {\n return;\n }\n\n setIsOverflown(ref.current.scrollWidth > ref.current.clientWidth);\n }, []);\n\n return (\n <Tooltip isPortal placement={Placement.Top} isOpen={noTooltip} content={name}>\n <Container ref={ref} isVisible={isVisible}>\n {title}\n </Container>\n </Tooltip>\n );\n};\n","import styled from '@emotion/styled';\n\nimport {Placement, SizeTokenValue} from '@join-x5/react-theme';\nimport {DragIndicatorVerticalIcon} from '@join-x5/react-icons';\nimport {Tooltip} from '@join-x5/react';\n\nimport type {ColumnItem} from '../types';\n\ntype HandleProps = Pick<ColumnItem, 'isLocked'>;\n\nconst HandleContainer = styled.div<HandleProps>`\n flex-grow: 0;\n flex-shrink: 0;\n width: 16px;\n height: 16px;\n\n color: ${props => props.theme.colors.grey[props.isLocked ? 40 : 60]};\n`;\n\nexport const Handle: React.FC<HandleProps> = ({isLocked}) => {\n const child = (\n <HandleContainer isLocked={isLocked}>\n <DragIndicatorVerticalIcon size={SizeTokenValue.Small} />\n </HandleContainer>\n );\n\n if (!isLocked) {\n return child;\n }\n\n return (\n <Tooltip placement={Placement.Top} content=\"Нельзя открепить столбец\">\n {child}\n </Tooltip>\n );\n};\n","'use client';\n\nimport {useContext} from 'react';\n\nimport {Placement, SizeTokenValue} from '@join-x5/react-theme';\nimport {VisibilityOnIcon, VisibilityOffIcon} from '@join-x5/react-icons';\nimport {ButtonVariant, IconButton} from '@join-x5/react';\n\nimport {DataGridSettingsContext} from '../DataGridSettingsContext';\n\nimport type {MouseEventHandler} from 'react';\nimport type {ColumnItem} from '../types';\n\nexport const Visibility: React.FC<{item: ColumnItem}> = props => {\n const {id, isVisible, isAlwaysVisible} = props.item;\n\n const {items, setItems} = useContext(DataGridSettingsContext);\n\n const toggleVisible: MouseEventHandler = () => {\n if (isAlwaysVisible) {\n return;\n }\n\n setItems(items.map(item => (item.id === id ? {...item, isVisible: !isVisible} : item)));\n };\n\n const Icon = isVisible ? VisibilityOnIcon : VisibilityOffIcon;\n\n const tooltip = {\n placement: Placement.Top,\n content: isAlwaysVisible ? 'Нельзя скрыть' : isVisible ? 'Скрыть столбец' : 'Показать столбец',\n };\n\n return (\n <IconButton\n tooltip={tooltip}\n size={SizeTokenValue.XSmall}\n variant={ButtonVariant.InnerInput}\n disabled={isAlwaysVisible}\n onClick={toggleVisible}\n >\n <Icon size={SizeTokenValue.Small} />\n </IconButton>\n );\n};\n","import {memo} from 'react';\nimport styled from '@emotion/styled';\n\nimport {Content} from './Content';\nimport {Handle} from './Handle';\nimport {Visibility} from './Visibility';\n\nimport type {RefCallback} from 'react';\nimport type {DraggableSyntheticListeners} from '@dnd-kit/core';\nimport type {ColumnItem} from '../types';\n\nconst Container = styled.div`\n display: flex;\n flex-grow: 1;\n overflow: hidden;\n align-items: center;\n justify-content: space-between;\n gap: 4px;\n`;\n\ntype ItemContentProps = {\n item: ColumnItem;\n listeners?: DraggableSyntheticListeners;\n handleRef?: RefCallback<HTMLDivElement>;\n};\n\nexport const ItemContent = memo<ItemContentProps>(({item, listeners, handleRef}) => {\n const handleProps = item.isLocked ? undefined : {...listeners, style: {cursor: 'pointer'}};\n\n return (\n <Container>\n <Visibility item={item} />\n <Container ref={handleRef} {...handleProps}>\n <Content item={item} />\n <Handle isLocked={item.isLocked} />\n </Container>\n </Container>\n );\n});\n","'use client';\n\nimport {useEffect} from 'react';\nimport styled from '@emotion/styled';\nimport {DragOverlay} from '@dnd-kit/core';\nimport {useSortable} from '@dnd-kit/sortable';\n\nimport baseTheme from '@join-x5/react-theme';\n\nimport {ColumnArea} from '../types';\n\nimport {ItemContent} from './ItemContent';\n\nimport type {CSSProperties} from 'react';\nimport type {ColumnItem, ColumnItemId} from '../types';\n\nconst BaseContainer = styled.div`\n position: relative;\n box-sizing: border-box;\n height: 32px;\n padding: 4px;\n border-radius: 4px;\n transform-origin: 0 0;\n touch-action: manipulation;\n`;\n\nconst Placeholder = styled(BaseContainer)`\n transform: translate3d(var(--tx, 0), var(--ty, 0), 0) scaleX(var(--sx, 1)) scaleY(var(--sy, 1));\n background-color: ${props => props.theme.colors.grey[10]};\n`;\n\nconst Dragging = styled(BaseContainer)`\n background-color: ${props => props.theme.colors.white};\n box-shadow: ${baseTheme.shadows.medium};\n pointer-events: none;\n`;\n\nconst Container = styled(BaseContainer)`\n transform: translate3d(var(--tx, 0), var(--ty, 0), 0) scaleX(var(--sx, 1)) scaleY(var(--sy, 1));\n\n :hover {\n background-color: ${props => props.theme.colors.grey[10]};\n }\n\n ::after {\n content: '';\n position: absolute;\n display: none;\n width: 100%;\n height: 2px;\n left: 0;\n background-color: ${props => props.theme.colors.accent[90]};\n }\n\n &[data-is-above]::after {\n display: block;\n top: 1px;\n }\n\n &[data-is-below]::after {\n display: block;\n bottom: 0;\n }\n\n &[data-is-fixed][data-is-above]:first-of-type::after {\n width: calc(100% - 10px);\n top: 2px;\n left: 5px;\n }\n\n &[data-is-fixed][data-is-below]:last-of-type::after {\n width: calc(100% - 10px);\n bottom: 1px;\n left: 5px;\n }\n\n &[data-is-search] {\n background-color: ${props => props.theme.colors.accent[10]};\n }\n`;\n\ntype AreaItemProps = {\n id: ColumnItemId;\n item: ColumnItem;\n isActive: boolean;\n isAbove: boolean;\n isBelow: boolean;\n isSearch: boolean;\n};\n\nexport const AreaItem: React.FC<AreaItemProps> = ({id, item, isActive, isAbove, isBelow, isSearch}) => {\n const {setNodeRef, setActivatorNodeRef, listeners, transform, transition} = useSortable({id});\n\n if (isActive) {\n return <Placeholder ref={setNodeRef} />;\n }\n\n const style: CSSProperties = {transition};\n\n if (transform) {\n style['--tx'] = `${Math.round(transform.x)}px`;\n style['--ty'] = `${Math.round(transform.y)}px`;\n style['--sx'] = `${transform.scaleX}`;\n style['--sy'] = `${transform.scaleY}`;\n }\n\n return (\n <Container\n ref={setNodeRef}\n style={style}\n data-is-fixed={item.area !== ColumnArea.Default || undefined}\n data-is-above={isAbove || undefined}\n data-is-below={isBelow || undefined}\n data-is-search={isSearch || undefined}\n >\n <ItemContent handleRef={setActivatorNodeRef} listeners={listeners} item={item} />\n </Container>\n );\n};\n\nexport const ActiveItemOverlay: React.FC<{item?: ColumnItem}> = ({item}) => {\n const child = !item ? null : (\n <Dragging>\n <ItemContent item={item} />\n </Dragging>\n );\n\n useEffect(() => {\n if (!item) {\n return;\n }\n\n window.document.body.style.cursor = 'grabbing';\n\n return () => {\n window.document.body.style.cursor = '';\n };\n }, [item]);\n\n return <DragOverlay>{child}</DragOverlay>;\n};\n","'use client';\n\nimport {useContext} from 'react';\nimport {SortableContext} from '@dnd-kit/sortable';\n\nimport {DataGridSettingsContext} from '../DataGridSettingsContext';\n\nimport {AreaItem} from './AreaItem';\n\nimport type {ReactNode} from 'react';\nimport type {ColumnItem, ColumnItemId, DataGridSettingsActiveItem} from '../types';\n\ntype GetItem = {\n id: ColumnItemId;\n item: ColumnItem;\n activeItem: DataGridSettingsActiveItem | undefined;\n isSearch: boolean;\n};\n\nconst getItem = ({id, item, isSearch, activeItem}: GetItem) => {\n const props = {\n id,\n item,\n isSearch,\n isActive: false,\n isAbove: false,\n isBelow: false,\n };\n\n if (activeItem) {\n props.isActive = item.id === activeItem.id;\n\n if (item.id === activeItem.overId) {\n props.isAbove = !!activeItem.isAbove;\n props.isBelow = !activeItem.isAbove;\n }\n }\n\n return <AreaItem key={item.id} {...props} />;\n};\n\ntype ItemsProps = {\n itemIds: ColumnItemId[];\n activeItem?: DataGridSettingsActiveItem;\n};\n\nexport const Items: React.FC<ItemsProps> = ({itemIds, activeItem}) => {\n const {itemsById, searchItems} = useContext(DataGridSettingsContext);\n\n const child: ReactNode[] = [];\n const newItemIds: ColumnItemId[] = [];\n\n for (const itemId of itemIds) {\n const item = itemsById.get(itemId);\n if (!item) {\n continue;\n }\n\n const newId = itemId === activeItem?.id ? `${itemId}Placeholder` : itemId;\n const isSearch = searchItems.includes(itemId);\n\n newItemIds.push(newId);\n child.push(getItem({item, activeItem, isSearch, id: newId}));\n }\n\n return <SortableContext items={newItemIds}>{child}</SortableContext>;\n};\n\nexport {ActiveItemOverlay} from './AreaItem';\n","import styled from '@emotion/styled';\nimport {useDroppable} from '@dnd-kit/core';\n\nimport {Placement} from '@join-x5/react-theme';\nimport {Tooltip} from '@join-x5/react';\n\nimport {Items} from '../AreaItem';\nimport {ColumnArea} from '../types';\n\nimport type {ColumnItemId, DataGridSettingsActiveItem, ItemsById} from '../types';\n\nimport type {PropsWithChildren} from '@join-x5/react-theme';\n\nconst Container = styled.div`\n position: relative;\n min-height: 32px;\n`;\n\nconst Content = styled.div`\n min-height: 32px;\n`;\n\nconst Header = styled.div`\n position: relative;\n padding: 6px 8px;\n border-radius: 8px 8px 0 0;\n text-align: center;\n user-select: none;\n z-index: 1;\n\n ${({theme}) => ({\n ...theme.typography.p2,\n\n color: theme.colors.white,\n })}\n`;\n\nconst Placeholder = styled.div`\n padding: 8px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n user-select: none;\n\n ${({theme}) => ({\n ...theme.typography.p2,\n\n color: theme.colors.grey[60],\n })}\n`;\n\nconst FixedContainer = styled.div<{isOver: boolean}>`\n position: relative;\n\n ::after {\n content: '';\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n box-sizing: border-box;\n border-radius: 8px;\n border-width: 2px;\n border-style: dashed;\n pointer-events: none;\n }\n\n ${({theme, isOver}) => {\n return `\n ::after {\n border-color: ${isOver ? theme.colors.accent[80] : theme.colors.grey[60]};\n }\n\n ${Header} {\n background-color: ${isOver ? theme.colors.accent[80] : theme.colors.grey[50]};\n }\n\n ${Placeholder} {\n background-color: ${isOver ? theme.colors.accent[10] : undefined};\n }\n `;\n }}\n`;\n\ntype AreaProps = {\n id: string;\n area: ColumnArea;\n isEmpty: boolean;\n isOverItems: boolean;\n isWithHeader: boolean;\n} & PropsWithChildren;\n\nconst DefaultArea: React.FC<AreaProps> = ({children, id, area}) => {\n const {setNodeRef} = useDroppable({id, data: {area}});\n\n return <Container ref={setNodeRef}>{children}</Container>;\n};\n\nconst FixedArea: React.FC<AreaProps> = ({children, id, area, isEmpty, isOverItems, isWithHeader}) => {\n const {isOver, setNodeRef} = useDroppable({id, data: {area}});\n\n if (isEmpty) {\n const placeholderText = `Перетащите столбец сюда, чтобы\n закрепить его ${area === ColumnArea.FixedLeft ? 'слева' : 'справа'} от таблицы`;\n\n return (\n <FixedContainer ref={setNodeRef} isOver={isOver || isOverItems}>\n <Header hidden={!isWithHeader}>Область для закрепления столбца</Header>\n <Content>\n <Tooltip placement={Placement.Right} content={placeholderText} whiteSpace=\"pre-line\">\n <Placeholder>{placeholderText}</Placeholder>\n </Tooltip>\n </Content>\n </FixedContainer>\n );\n }\n\n return (\n <FixedContainer ref={setNodeRef} isOver={isOver || isOverItems}>\n <Header hidden={!isWithHeader}>Область для закрепления столбца</Header>\n <Content>{children}</Content>\n </FixedContainer>\n );\n};\n\ntype GetArea = {\n columnIndex: number;\n area: ColumnArea;\n itemIds: ColumnItemId[];\n itemsById: ItemsById;\n activeItem: DataGridSettingsActiveItem | undefined;\n searchItems: ColumnItemId[];\n};\n\nexport const getArea = ({columnIndex, area, itemIds, itemsById, activeItem}: GetArea) => {\n const Component = area === ColumnArea.Default ? DefaultArea : FixedArea;\n\n const isWithHeader = area === ColumnArea.FixedLeft && columnIndex === 0;\n const isSingleItemActive = itemIds.length === 1 && itemIds[0] === activeItem?.id;\n const isFixedArea = area !== ColumnArea.Default;\n\n const isEmpty = itemIds.length === 0 || (isSingleItemActive && isFixedArea);\n const isOverItems = itemIds.findIndex(itemId => itemsById.get(itemId)?.id === activeItem?.overId) !== -1;\n\n const props: AreaProps = {\n area,\n isEmpty,\n isOverItems,\n isWithHeader,\n\n id: `${columnIndex}_${area}`,\n };\n\n return (\n <Component key={props.id} {...props}>\n <Items itemIds={itemIds} activeItem={activeItem} />\n </Component>\n );\n};\n","'use client';\n\nimport {useContext, useRef, useState} from 'react';\nimport styled from '@emotion/styled';\n\nimport {SizeTokenValue} from '@join-x5/react-theme';\nimport {SearchInput} from '@join-x5/react';\n\nimport {DataGridSettingsContext} from '../DataGridSettingsContext';\n\nimport type {ChangeEventHandler} from 'react';\nimport type {ColumnItemId} from '../types';\n\nconst Container = styled.div`\n margin-bottom: 16px;\n`;\n\nexport const Search: React.FC = () => {\n const {items, setSearchItems, qa} = useContext(DataGridSettingsContext);\n const [value, setValue] = useState<string>('');\n const inputTimeout = useRef<ReturnType<typeof setTimeout>>();\n\n const onChange: ChangeEventHandler<HTMLInputElement> = e => {\n const newSearchValue = e.target.value.toLowerCase().trim();\n\n clearTimeout(inputTimeout.current);\n setValue(e.target.value);\n\n inputTimeout.current = setTimeout(() => {\n if (!newSearchValue) {\n setSearchItems([]);\n return;\n }\n\n const newSearchItems = items.reduce((acc, item) => {\n if (item.name.toLowerCase().includes(newSearchValue)) {\n acc.push(item.id);\n }\n\n return acc;\n }, [] as ColumnItemId[]);\n\n setSearchItems(newSearchItems);\n }, 100);\n };\n\n return (\n <Container>\n <SearchInput size={SizeTokenValue.Small} value={value} onChange={onChange} label=\"Поиск\" qa={`${qa}-search`} />\n </Container>\n );\n};\n","import {rectIntersection} from '@dnd-kit/core';\n\nimport {ColumnArea} from '../types';\n\nimport type {Active, CollisionDetection, Over} from '@dnd-kit/core';\nimport type {ColumnItem, DataGridSettingsActiveItem, ItemsById} from '../types';\n\nexport const moveItem = (items: ColumnItem[], active: DataGridSettingsActiveItem, over: Over): ColumnItem[] => {\n const areaFactor = {\n [ColumnArea.Default]: 0,\n [ColumnArea.FixedLeft]: -1,\n [ColumnArea.FixedRight]: 1,\n };\n\n let newItems = [...items]\n .sort((a, b) => {\n const aSort = a.sort + items.length * areaFactor[a.area];\n const bSort = b.sort + items.length * areaFactor[b.area];\n\n return aSort - bSort;\n })\n .map((item, sort) => ({...item, sort}));\n\n const overItem = newItems.find(item => item.id === over.id);\n\n if (!overItem) {\n const newArea: ColumnArea | undefined = over.data?.current?.area;\n if (newArea) {\n newItems = newItems.map(item => (item.id === active.id ? {...item, area: newArea} : item));\n }\n\n return newItems;\n }\n\n const newSort = overItem.sort + (active.isAbove ? 0 : 1);\n\n const [relativeItems, fixedItems] = newItems.reduce(\n (acc, item) => {\n acc[+item.isLocked].push(item);\n return acc;\n },\n [[], []] as [ColumnItem[], ColumnItem[]]\n );\n\n newItems = relativeItems.map(item => {\n if (item.id === active.id) {\n return {...item, sort: newSort, area: overItem.area};\n }\n\n if (item.sort >= newSort) {\n return {...item, sort: item.sort + 1};\n }\n\n return item;\n });\n\n newItems.sort((a, b) => a.sort - b.sort);\n\n for (const item of fixedItems) {\n newItems.splice(item.sort, 0, item);\n }\n\n return newItems.map((item, sort) => ({...item, sort}));\n};\n\nexport const moveOver = (itemsById: ItemsById, active: Active, over: Over) => {\n const overItem = itemsById.get(over.id);\n if (!overItem) {\n return {overId: undefined, isAbove: undefined};\n }\n\n const isFirst = over.data?.current?.sortable?.index === 0;\n const offsetTop = active.rect?.current?.translated?.top;\n\n const isAbove = isFirst && !!offsetTop && offsetTop < over.rect?.top;\n\n return {overId: overItem.id, isAbove};\n};\n\nexport const collisionDetection: CollisionDetection = args => {\n const rectResult = rectIntersection(args);\n\n if (rectResult.length === 2) {\n try {\n const sortables = rectResult.filter(item => !!item.data?.droppableContainer?.data?.current?.sortable);\n if (sortables.length === 1) {\n return sortables;\n }\n //eslint-disable-next-line no-empty\n } catch {}\n }\n\n return rectResult;\n};\n","'use client';\n\nimport {MouseSensor, TouchSensor, useSensor, useSensors} from '@dnd-kit/core';\n\nimport {useContext, useState} from 'react';\n\nimport {useUpdateEffect} from '@join-x5/react-theme';\n\nimport {DataGridSettingsContext} from '../DataGridSettingsContext';\n\nimport {moveItem, moveOver, collisionDetection} from './utils';\n\nimport type {DndContextProps} from '@dnd-kit/core';\nimport type {DataGridSettingsActiveItem} from '../types';\n\nexport const useColumns = () => {\n const {columns, items, setItems, itemsById, searchItems} = useContext(DataGridSettingsContext);\n const [activeItem, setActiveItem] = useState<DataGridSettingsActiveItem>();\n const sensors = useSensors(useSensor(MouseSensor), useSensor(TouchSensor));\n\n const onDragCancel = () => {\n setActiveItem(undefined);\n };\n\n const onDragStart: DndContextProps['onDragStart'] = args => {\n const newActiveItem = itemsById.get(args.active.id);\n setActiveItem(newActiveItem);\n };\n\n const onDragMove: DndContextProps['onDragMove'] = ({over, active}) => {\n if (!activeItem || !over) {\n if (activeItem && activeItem.overId !== undefined) {\n setActiveItem({...activeItem, overId: undefined, isAbove: undefined});\n }\n\n return;\n }\n\n const {overId, isAbove} = moveOver(itemsById, active, over);\n\n if (activeItem.overId === overId && activeItem.isAbove === isAbove) {\n return;\n }\n\n setActiveItem({...activeItem, overId, isAbove});\n };\n\n const onDragEnd: DndContextProps['onDragEnd'] = ({over}) => {\n if (!activeItem || !over) {\n if (activeItem) {\n setActiveItem(undefined);\n }\n\n return;\n }\n\n setActiveItem(undefined);\n setItems(moveItem(items, activeItem, over));\n };\n\n useUpdateEffect(() => {\n setActiveItem(undefined);\n }, [items]);\n\n return {\n columns,\n itemsById,\n searchItems,\n activeItem,\n sensors,\n onDragStart,\n onDragMove,\n onDragEnd,\n onDragCancel,\n collisionDetection,\n };\n};\n","import styled from '@emotion/styled';\nimport {DndContext} from '@dnd-kit/core';\n\nimport {ModalContent as BaseModalContent} from '@join-x5/react';\n\nimport {getArea} from '../Area';\nimport {ActiveItemOverlay} from '../AreaItem';\nimport {Search} from '../Search';\n\nimport {useColumns} from './hook';\n\nimport type {ReactNode} from 'react';\n\nconst ModalContent = styled(BaseModalContent)`\n padding: 0 24px 16px;\n`;\n\nconst Container = styled.div`\n display: flex;\n margin-left: -32px;\n\n > div {\n display: flex;\n position: relative;\n flex-direction: column;\n gap: 4px;\n box-sizing: border-box;\n padding-left: 32px;\n\n ::after {\n content: '';\n position: absolute;\n width: 0;\n height: 100%;\n top: 0;\n left: 16px;\n border-left: 1px solid ${props => props.theme.colors.grey[10]};\n }\n\n :first-of-type::after {\n display: none;\n }\n }\n`;\n\nexport const Columns: React.FC = () => {\n const {columns, itemsById, searchItems, activeItem, ...rest} = useColumns();\n\n const child = columns.map((column, columnIndex) => {\n const areas: ReactNode[] = Array.from(column).map(([area, itemIds]) =>\n getArea({columnIndex, area, itemIds, itemsById, searchItems, activeItem})\n );\n\n const width = `calc(${100 / columns.length}%)`;\n\n return (\n <div key={columnIndex} style={{width}}>\n {areas}\n </div>\n );\n });\n\n return (\n <ModalContent noBorderScroll>\n <Search />\n <DndContext id=\"DataGridSettings\" {...rest}>\n <Container>{child}</Container>\n <ActiveItemOverlay item={activeItem} />\n </DndContext>\n </ModalContent>\n );\n};\n","'use client';\n\nimport {useContext, useRef, useState} from 'react';\nimport styled from '@emotion/styled';\n\nimport {Placement, SizeTokenValue} from '@join-x5/react-theme';\nimport {\n Button,\n ButtonVariant,\n IconButton,\n ModalFooterContent,\n Dropdown,\n DropdownContent as BaseDropdownContent,\n} from '@join-x5/react';\n\nimport {MoreHorizontalIcon} from '@join-x5/react-icons';\n\nimport {DataGridSettingsContext} from '../DataGridSettingsContext';\n\nimport type {RequiredQA} from '@join-x5/react-theme';\n\nconst DropdownContent = styled(BaseDropdownContent)`\n overflow: hidden;\n`;\n\nconst DropdownButton = styled.button`\n width: 100%;\n padding: 6px 12px;\n border: 0;\n outline: none;\n background: none;\n text-align: left;\n cursor: pointer;\n\n ${props => props.theme.typography.p1compact}\n\n :hover {\n background-color: ${props => props.theme.colors.grey[10]};\n }\n`;\n\ntype DropdownButtonsProps = {\n isAllVisible: boolean;\n onReset: () => void;\n onToggleVisible: () => void;\n} & RequiredQA;\n\nconst DropdownButtons: React.FC<DropdownButtonsProps> = ({isAllVisible, qa, ...props}) => {\n const [isOpen, setIsOpen] = useState(false);\n const ref = useRef<HTMLButtonElement>(null);\n\n const onToggle = () => setIsOpen(!isOpen);\n\n const onReset = () => {\n setIsOpen(false);\n props.onReset();\n };\n\n const onToggleVisible = () => {\n setIsOpen(false);\n props.onToggleVisible();\n };\n\n return (\n <ModalFooterContent>\n <IconButton\n ref={ref}\n size={SizeTokenValue.Small}\n variant={ButtonVariant.InnerInput}\n onClick={onToggle}\n qa={`${qa}-footer-dropdown`}\n >\n <MoreHorizontalIcon size={SizeTokenValue.Small} />\n </IconButton>\n <Dropdown width=\"152px\" placement={Placement.TopStart} isOpen={isOpen} setIsOpen={setIsOpen} targetRef={ref}>\n <DropdownContent>\n <DropdownButton type=\"button\" onClick={onReset} data-qa={`${qa}-reset`}>\n По умолчанию\n </DropdownButton>\n <DropdownButton type=\"button\" onClick={onToggleVisible} data-qa={`${qa}-toggle-visible`}>\n {isAllVisible ? 'Скрыть все' : 'Показать все'}\n </DropdownButton>\n </DropdownContent>\n </Dropdown>\n </ModalFooterContent>\n );\n};\n\nexport const LeftButtons: React.FC = () => {\n const {items, defaultItems, setItems, columns, qa} = useContext(DataGridSettingsContext);\n\n const isAllVisible = items.findIndex(item => !item.isVisible) === -1;\n\n const onReset = () => setItems(defaultItems);\n\n const onToggleVisible = () => {\n const newItems = items.map(item => ({...item, isVisible: item.isAlwaysVisible || !isAllVisible}));\n\n setItems(newItems);\n };\n\n if (columns.length === 1) {\n return <DropdownButtons isAllVisible={isAllVisible} onReset={onReset} onToggleVisible={onToggleVisible} qa={qa} />;\n }\n\n return (\n <ModalFooterContent>\n <Button size={SizeTokenValue.Small} variant={ButtonVariant.Ghost} onClick={onReset} qa={`${qa}-reset`}>\n По умолчанию\n </Button>\n <Button\n size={SizeTokenValue.Small}\n variant={ButtonVariant.Ghost}\n onClick={onToggleVisible}\n qa={`${qa}-toggle-visible`}\n >\n {isAllVisible ? 'Скрыть все' : 'Показать все'}\n </Button>\n </ModalFooterContent>\n );\n};\n","'use client';\n\nimport {useContext} from 'react';\nimport styled from '@emotion/styled';\n\nimport {SizeTokenValue} from '@join-x5/react-theme';\nimport {Button, ButtonVariant, ModalFooter as BaseModalFooter, ModalFooterContent} from '@join-x5/react';\n\nimport {DataGridSettingsContext} from '../DataGridSettingsContext';\n\nimport {LeftButtons} from './LeftButtons';\n\nconst ModalFooter = styled(BaseModalFooter)`\n padding: 20px 24px 20px 16px;\n border-top: 1px solid ${props => props.theme.colors.grey[20]};\n`;\n\nexport const Footer: React.FC = () => {\n const context = useContext(DataGridSettingsContext);\n const {items, setIsOpen, qa} = context;\n\n const onClose = () => setIsOpen(false);\n const onSave = () => context.onSave(items);\n\n return (\n <ModalFooter>\n <LeftButtons />\n <ModalFooterContent>\n <Button size={SizeTokenValue.Small} variant={ButtonVariant.Outlined} onClick={onClose} qa={`${qa}-cancel`}>\n Отменить\n </Button>\n <Button size={SizeTokenValue.Small} variant={ButtonVariant.Primary} onClick={onSave} qa={`${qa}-save`}>\n Применить\n </Button>\n </ModalFooterContent>\n </ModalFooter>\n );\n};\n","import {SizeTokenValue} from '@join-x5/react-theme';\n\nimport {ColumnArea} from './types';\n\nimport type {ColumnData, ColumnItem, ItemsById} from './types';\n\nexport const getColumnsData = (items: ColumnItem[], areas: ColumnArea[]) => {\n const columns: ColumnData[] = [];\n const itemsById: ItemsById = new Map();\n\n const areaFactor = {\n [ColumnArea.Default]: 0,\n [ColumnArea.FixedLeft]: -1,\n [ColumnArea.FixedRight]: 1,\n };\n\n const sortedItems = [...items].sort((a, b) => {\n const aSort = a.sort + items.length * areaFactor[a.area];\n const bSort = b.sort + items.length * areaFactor[b.area];\n\n return aSort - bSort;\n });\n\n const withFixedLeft = areas.includes(ColumnArea.FixedLeft);\n const withFixedRight = areas.includes(ColumnArea.FixedRight);\n\n const itemsInColumn = (() => {\n const ITEMS_IN_COLUMN = 15;\n const COLUMNS_MAX = 4;\n\n const rem = Math.ceil(items.length / ITEMS_IN_COLUMN);\n const columnsCount = rem > COLUMNS_MAX ? COLUMNS_MAX : rem;\n\n const result = Math.ceil(items.length / columnsCount);\n\n return (result > ITEMS_IN_COLUMN ? result : ITEMS_IN_COLUMN) + (withFixedLeft || withFixedRight ? 1 : 0);\n })();\n\n while (sortedItems.length > 0) {\n const isFirstColumn = columns.length === 0;\n\n const hasFixedLeftArea = isFirstColumn && withFixedLeft;\n const hasFixedLeftItems = sortedItems[0]?.area === ColumnArea.FixedLeft;\n\n const newItemsInColumn = itemsInColumn - (hasFixedLeftArea ? 2 - +hasFixedLeftItems : 0);\n const columnItems = sortedItems.splice(0, newItemsInColumn);\n\n const hasFixedRightArea = sortedItems.length === 0 && withFixedRight;\n const hasFixedRightItems = columnItems.findIndex(item => item.area === ColumnArea.FixedRight) !== -1;\n\n const column: ColumnData = new Map();\n\n if (hasFixedLeftArea || hasFixedLeftItems) {\n column.set(ColumnArea.FixedLeft, []);\n }\n\n column.set(ColumnArea.Default, []);\n\n if (hasFixedRightArea || hasFixedRightItems) {\n column.set(ColumnArea.FixedRight, []);\n }\n\n for (const columnItem of columnItems) {\n const area = column.get(columnItem.area);\n if (!area) {\n continue;\n }\n\n itemsById.set(columnItem.id, columnItem);\n area.push(columnItem.id);\n }\n\n const defaultAreaIsEmpty = column.get(ColumnArea.Default)?.length === 0;\n\n if (defaultAreaIsEmpty) {\n column.delete(ColumnArea.Default);\n }\n\n columns.push(column);\n }\n\n const noDefaultColumnAdded = columns.findIndex(column => column.has(ColumnArea.Default)) === -1;\n if (noDefaultColumnAdded && columns.length) {\n const fixedRightIndex = columns.findIndex(column => column.has(ColumnArea.FixedRight));\n\n if (fixedRightIndex !== -1) {\n const columnAreas = columns[fixedRightIndex];\n const rightItems = columnAreas.get(ColumnArea.FixedRight);\n\n if (rightItems) {\n columnAreas.delete(ColumnArea.FixedRight);\n columnAreas.set(ColumnArea.Default, []);\n columnAreas.set(ColumnArea.FixedRight, rightItems);\n } else {\n columnAreas.set(ColumnArea.Default, []);\n }\n } else {\n columns[columns.length - 1].set(ColumnArea.Default, []);\n }\n }\n\n const size = ((): SizeTokenValue => {\n switch (columns.length) {\n case 1:\n return SizeTokenValue.Small;\n case 2:\n return SizeTokenValue.Medium;\n case 3:\n return SizeTokenValue.Large;\n }\n\n return SizeTokenValue.XLarge;\n })();\n\n return {columns, itemsById, size};\n};\n","'use client';\n\nimport {useMemo, useState} from 'react';\n\nimport {useUpdateEffect} from '@join-x5/react-theme';\nimport {Modal, ModalHeader} from '@join-x5/react';\n\nimport {Columns} from './Columns';\nimport {Footer} from './Footer';\nimport {DataGridSettingsContext} from './DataGridSettingsContext';\nimport {getColumnsData} from './utils';\nimport {ColumnArea} from './types';\n\nimport type {ColumnItem, ColumnItemId, DataGridSettingsProps} from './types';\n\nexport const DataGridSettings: React.FC<DataGridSettingsProps> = props => {\n const {\n isOpen,\n\n qa = 'datagridsettings',\n areas = [ColumnArea.FixedLeft, ColumnArea.Default],\n\n ...rest\n } = props;\n\n const [items, setItems] = useState<ColumnItem[]>(props.items);\n const [searchItems, setSearchItems] = useState<ColumnItemId[]>([]);\n\n const {columns, itemsById, size} = useMemo(() => getColumnsData(items, areas), [items, areas]);\n\n const context = {...rest, columns, itemsById, areas, items, setItems, searchItems, setSearchItems, qa};\n\n const onClose = () => props.setIsOpen(false);\n\n useUpdateEffect(() => {\n setItems(props.items);\n }, [props.items]);\n\n useUpdateEffect(() => {\n if (!isOpen) {\n setTimeout(() => setSearchItems([]));\n }\n }, [isOpen]);\n\n const modalProps = {isOpen, onClose, qa, size};\n\n return (\n <Modal {...modalProps}>\n <ModalHeader onClose={onClose}>Настройка таблицы</ModalHeader>\n <DataGridSettingsContext.Provider value={context}>\n <Columns />\n <Footer />\n </DataGridSettingsContext.Provider>\n </Modal>\n );\n};\n"],"names":["DataGridSettingsContext","createContext","items","defaultItems","areas","columns","itemsById","Map","searchItems","setSearchItems","setIsOpen","setItems","onSave","qa","ColumnArea","Default","FixedLeft","FixedRight","Container","_styled","process","env","NODE_ENV","target","label","props","theme","colors","grey","isVisible","typography","p1","Content","item","name","title","isOverflown","setIsOverflown","useState","ref","useRef","noTooltip","undefined","useEffect","current","scrollWidth","clientWidth","Tooltip","Placement","Top","jsx","HandleContainer","isLocked","Handle","child","DragIndicatorVerticalIcon","SizeTokenValue","Small","Visibility","id","isAlwaysVisible","useContext","toggleVisible","map","Icon","VisibilityOnIcon","VisibilityOffIcon","tooltip","placement","content","IconButton","XSmall","ButtonVariant","InnerInput","styles","toString","_EMOTION_STRINGIFIED_CSS_ERROR__","ItemContent","memo","listeners","handleRef","handleProps","style","cursor","jsxs","BaseContainer","Placeholder","Dragging","white","baseTheme","shadows","medium","accent","AreaItem","isActive","isAbove","isBelow","isSearch","setNodeRef","setActivatorNodeRef","transform","transition","useSortable","Math","round","x","y","scaleX","scaleY","area","ActiveItemOverlay","document","body","DragOverlay","getItem","activeItem","overId","Items","itemIds","newItemIds","itemId","get","newId","includes","push","SortableContext","Header","p2","color","FixedContainer","isOver","DefaultArea","children","useDroppable","data","FixedArea","isEmpty","isOverItems","isWithHeader","placeholderText","Right","getArea","columnIndex","Component","isSingleItemActive","length","isFixedArea","findIndex","Search","value","setValue","inputTimeout","onChange","e","newSearchValue","toLowerCase","trim","clearTimeout","setTimeout","newSearchItems","reduce","acc","SearchInput","moveItem","active","over","areaFactor","newItems","sort","a","b","aSort","bSort","overItem","find","newArea","newSort","relativeItems","fixedItems","splice","moveOver","isFirst","sortable","index","offsetTop","rect","translated","top","collisionDetection","args","rectResult","rectIntersection","sortables","filter","droppableContainer","useColumns","setActiveItem","sensors","useSensors","useSensor","MouseSensor","TouchSensor","onDragCancel","onDragStart","newActiveItem","onDragMove","onDragEnd","useUpdateEffect","ModalContent","BaseModalContent","Columns","rest","column","Array","from","width","DndContext","DropdownContent","BaseDropdownContent","DropdownButton","p1compact","DropdownButtons","isAllVisible","isOpen","onToggle","onReset","onToggleVisible","ModalFooterContent","MoreHorizontalIcon","Dropdown","TopStart","LeftButtons","Button","Ghost","ModalFooter","BaseModalFooter","Footer","context","onClose","Outlined","Primary","getColumnsData","sortedItems","withFixedLeft","withFixedRight","itemsInColumn","rem","ceil","ITEMS_IN_COLUMN","columnsCount","COLUMNS_MAX","result","hasFixedLeftArea","hasFixedLeftItems","newItemsInColumn","columnItems","hasFixedRightArea","hasFixedRightItems","set","columnItem","delete","noDefaultColumnAdded","has","fixedRightIndex","columnAreas","rightItems","size","Medium","Large","XLarge","DataGridSettings","useMemo","modalProps","Modal","ModalHeader"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../src/DataGridSettingsContext.ts","../src/types.ts","../src/AreaItem/Content.tsx","../src/AreaItem/Handle.tsx","../src/AreaItem/Visibility.tsx","../src/AreaItem/ItemContent.tsx","../src/AreaItem/AreaItem.tsx","../src/AreaItem/index.tsx","../src/Area/index.tsx","../src/Search/index.tsx","../src/Columns/utils.ts","../src/Columns/hook.ts","../src/Columns/index.tsx","../src/Footer/LeftButtons.tsx","../src/Footer/index.tsx","../src/utils.ts","../src/DataGridSettings.tsx"],"sourcesContent":["'use client';\n\nimport {createContext} from 'react';\n\nimport type {ColumnArea, ColumnItem, ColumnData, DataGridSettingsProps, ItemsById, ColumnItemId} from './types';\nimport type {RequiredQA} from '@join-x5/react-theme';\n\ntype DataGridSettingsContextProps = {\n columns: ColumnData[];\n itemsById: ItemsById;\n areas: ColumnArea[];\n\n setItems: (newItems: ColumnItem[]) => void;\n\n searchItems: ColumnItemId[];\n setSearchItems: (newSearchItems: ColumnItemId[]) => void;\n} & Pick<DataGridSettingsProps, 'setIsOpen' | 'items' | 'defaultItems' | 'onSave'> &\n RequiredQA;\n\nexport const DataGridSettingsContext = createContext<DataGridSettingsContextProps>({\n items: [],\n defaultItems: [],\n areas: [],\n columns: [],\n itemsById: new Map(),\n searchItems: [],\n setSearchItems: () => {},\n\n setIsOpen: () => {},\n setItems: () => {},\n onSave: () => {},\n qa: '',\n});\n","import type {ReactNode} from 'react';\nimport type {QA} from '@join-x5/react-theme';\n\nexport enum ColumnArea {\n /** Не закреплен */\n Default = 'default',\n\n /** Закреплен слева */\n FixedLeft = 'fixedLeft',\n\n /** Закреплен справа */\n FixedRight = 'fixedRight',\n}\n\n/** Идентификатор колонки */\nexport type ColumnItemId = string | number;\n\nexport type ColumnItem = {\n /** Идентификатор */\n id: ColumnItemId;\n\n /** Название\n *\n * Используется при поиске\n */\n name: string;\n\n /** Контент\n *\n * Текстовый контент сокращается через text-overflow: ellipsis\n */\n title: ReactNode;\n\n /** Область элемента */\n area: ColumnArea;\n\n /** Расположение элемента */\n sort: number;\n\n /** Видимость */\n isVisible: boolean;\n\n /** Всегда видим */\n isAlwaysVisible: boolean;\n\n /** Закреплен\n *\n * Сохраняет свою позицию\n */\n isLocked: boolean;\n};\n\nexport type DataGridSettingsProps = {\n /** Раскрыта ли модалка */\n isOpen: boolean;\n\n /** Обработчик раскрытия модалки */\n setIsOpen: (newIsOpen: boolean) => void;\n\n /** Элементы списка */\n items: ColumnItem[];\n\n /** Элементы по умолчанию\n *\n * Используется при нажатии кнопки \"По умолчанию\"\n */\n defaultItems: ColumnItem[];\n\n /** Доступные области\n *\n * По умолчанию [ColumnArea.FixedLeft, ColumnArea.Default]\n */\n areas?: ColumnArea[];\n\n /** Обработчик сохранения изменений */\n onSave: (newItems: ColumnItem[]) => void;\n} & QA;\n\nexport type DataGridSettingsActiveItem = {\n overId?: ColumnItemId;\n isAbove?: boolean;\n} & ColumnItem;\n\nexport type ColumnData = Map<ColumnArea, ColumnItemId[]>;\nexport type ItemsById = Map<ColumnItemId, ColumnItem>;\n","'use client';\n\nimport {useEffect, useRef, useState} from 'react';\nimport styled from '@emotion/styled';\n\nimport {Placement} from '@join-x5/react-theme';\nimport {Tooltip} from '@join-x5/react';\n\nimport type {ColumnItem} from '../types';\n\nconst Container = styled.div<Pick<ColumnItem, 'isVisible'>>`\n flex-grow: 1;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n user-select: none;\n color: ${props => props.theme.colors.grey[props.isVisible ? 100 : 40]};\n\n ${props => props.theme.typography.p1}\n`;\ntype ContentProps = {item: ColumnItem};\n\nexport const Content: React.FC<ContentProps> = ({item: {name, title, isVisible}}) => {\n const [isOverflown, setIsOverflown] = useState<boolean>(false);\n const ref = useRef<HTMLInputElement>(null);\n\n const noTooltip = !isOverflown ? false : undefined;\n\n useEffect(() => {\n if (!ref.current) {\n return;\n }\n\n setIsOverflown(ref.current.scrollWidth > ref.current.clientWidth);\n }, []);\n\n return (\n <Tooltip isPortal placement={Placement.Top} isOpen={noTooltip} content={name}>\n <Container ref={ref} isVisible={isVisible}>\n {title}\n </Container>\n </Tooltip>\n );\n};\n","import styled from '@emotion/styled';\n\nimport {Placement, SizeTokenValue} from '@join-x5/react-theme';\nimport {DragIndicatorVerticalIcon} from '@join-x5/react-icons';\nimport {Tooltip} from '@join-x5/react';\n\nimport type {ColumnItem} from '../types';\n\ntype HandleProps = Pick<ColumnItem, 'isLocked'>;\n\nconst HandleContainer = styled.div<HandleProps>`\n flex-grow: 0;\n flex-shrink: 0;\n width: 16px;\n height: 16px;\n\n color: ${props => props.theme.colors.grey[props.isLocked ? 40 : 60]};\n`;\n\nexport const Handle: React.FC<HandleProps> = ({isLocked}) => {\n const child = (\n <HandleContainer isLocked={isLocked}>\n <DragIndicatorVerticalIcon size={SizeTokenValue.Small} />\n </HandleContainer>\n );\n\n if (!isLocked) {\n return child;\n }\n\n return (\n <Tooltip placement={Placement.Top} content=\"Нельзя открепить столбец\">\n {child}\n </Tooltip>\n );\n};\n","'use client';\n\nimport {useContext} from 'react';\n\nimport {Placement, SizeTokenValue} from '@join-x5/react-theme';\nimport {VisibilityOnIcon, VisibilityOffIcon} from '@join-x5/react-icons';\nimport {ButtonVariant, IconButton} from '@join-x5/react';\n\nimport {DataGridSettingsContext} from '../DataGridSettingsContext';\n\nimport type {MouseEventHandler} from 'react';\nimport type {ColumnItem} from '../types';\n\nexport const Visibility: React.FC<{item: ColumnItem}> = props => {\n const {id, isVisible, isAlwaysVisible} = props.item;\n\n const {items, setItems} = useContext(DataGridSettingsContext);\n\n const toggleVisible: MouseEventHandler = () => {\n if (isAlwaysVisible) {\n return;\n }\n\n setItems(items.map(item => (item.id === id ? {...item, isVisible: !isVisible} : item)));\n };\n\n const Icon = isVisible ? VisibilityOnIcon : VisibilityOffIcon;\n\n const tooltip = {\n placement: Placement.Top,\n content: isAlwaysVisible ? 'Нельзя скрыть' : isVisible ? 'Скрыть столбец' : 'Показать столбец',\n };\n\n return (\n <IconButton\n tooltip={tooltip}\n size={SizeTokenValue.XSmall}\n variant={ButtonVariant.InnerInput}\n disabled={isAlwaysVisible}\n onClick={toggleVisible}\n >\n <Icon size={SizeTokenValue.Small} />\n </IconButton>\n );\n};\n","import {memo} from 'react';\nimport styled from '@emotion/styled';\n\nimport {Content} from './Content';\nimport {Handle} from './Handle';\nimport {Visibility} from './Visibility';\n\nimport type {RefCallback} from 'react';\nimport type {DraggableSyntheticListeners} from '@dnd-kit/core';\nimport type {ColumnItem} from '../types';\n\nconst Container = styled.div`\n display: flex;\n flex-grow: 1;\n overflow: hidden;\n align-items: center;\n justify-content: space-between;\n gap: 4px;\n`;\n\ntype ItemContentProps = {\n item: ColumnItem;\n listeners?: DraggableSyntheticListeners;\n handleRef?: RefCallback<HTMLDivElement>;\n};\n\nexport const ItemContent = memo<ItemContentProps>(({item, listeners, handleRef}) => {\n const handleProps = item.isLocked ? undefined : {...listeners, style: {cursor: 'pointer'}};\n\n return (\n <Container>\n <Visibility item={item} />\n <Container ref={handleRef} {...handleProps}>\n <Content item={item} />\n <Handle isLocked={item.isLocked} />\n </Container>\n </Container>\n );\n});\n","'use client';\n\nimport {useEffect} from 'react';\nimport styled from '@emotion/styled';\nimport {DragOverlay} from '@dnd-kit/core';\nimport {useSortable} from '@dnd-kit/sortable';\n\nimport baseTheme from '@join-x5/react-theme';\n\nimport {ColumnArea} from '../types';\n\nimport {ItemContent} from './ItemContent';\n\nimport type {CSSProperties} from 'react';\nimport type {ColumnItem, ColumnItemId} from '../types';\n\nconst BaseContainer = styled.div`\n position: relative;\n box-sizing: border-box;\n height: 32px;\n padding: 4px;\n border-radius: 4px;\n transform-origin: 0 0;\n touch-action: manipulation;\n`;\n\nconst Placeholder = styled(BaseContainer)`\n transform: translate3d(var(--tx, 0), var(--ty, 0), 0) scaleX(var(--sx, 1)) scaleY(var(--sy, 1));\n background-color: ${props => props.theme.colors.grey[10]};\n`;\n\nconst Dragging = styled(BaseContainer)`\n background-color: ${props => props.theme.colors.white};\n box-shadow: ${baseTheme.shadows.medium};\n pointer-events: none;\n`;\n\nconst Container = styled(BaseContainer)`\n transform: translate3d(var(--tx, 0), var(--ty, 0), 0) scaleX(var(--sx, 1)) scaleY(var(--sy, 1));\n\n :hover {\n background-color: ${props => props.theme.colors.grey[10]};\n }\n\n ::after {\n content: '';\n position: absolute;\n display: none;\n width: 100%;\n height: 2px;\n left: 0;\n background-color: ${props => props.theme.colors.accent[90]};\n }\n\n &[data-is-above]::after {\n display: block;\n top: 1px;\n }\n\n &[data-is-below]::after {\n display: block;\n bottom: 0;\n }\n\n &[data-is-fixed][data-is-above]:first-of-type::after {\n width: calc(100% - 10px);\n top: 2px;\n left: 5px;\n }\n\n &[data-is-fixed][data-is-below]:last-of-type::after {\n width: calc(100% - 10px);\n bottom: 1px;\n left: 5px;\n }\n\n &[data-is-search] {\n background-color: ${props => props.theme.colors.accent[10]};\n }\n`;\n\ntype AreaItemProps = {\n id: ColumnItemId;\n item: ColumnItem;\n isActive: boolean;\n isAbove: boolean;\n isBelow: boolean;\n isSearch: boolean;\n};\n\nexport const AreaItem: React.FC<AreaItemProps> = ({id, item, isActive, isAbove, isBelow, isSearch}) => {\n const {setNodeRef, setActivatorNodeRef, listeners, transform, transition} = useSortable({id});\n\n if (isActive) {\n return <Placeholder ref={setNodeRef} />;\n }\n\n const style: CSSProperties = {transition};\n\n if (transform) {\n style['--tx'] = `${Math.round(transform.x)}px`;\n style['--ty'] = `${Math.round(transform.y)}px`;\n style['--sx'] = `${transform.scaleX}`;\n style['--sy'] = `${transform.scaleY}`;\n }\n\n return (\n <Container\n ref={setNodeRef}\n style={style}\n data-is-fixed={item.area !== ColumnArea.Default || undefined}\n data-is-above={isAbove || undefined}\n data-is-below={isBelow || undefined}\n data-is-search={isSearch || undefined}\n >\n <ItemContent handleRef={setActivatorNodeRef} listeners={listeners} item={item} />\n </Container>\n );\n};\n\nexport const ActiveItemOverlay: React.FC<{item?: ColumnItem}> = ({item}) => {\n const child = !item ? null : (\n <Dragging>\n <ItemContent item={item} />\n </Dragging>\n );\n\n useEffect(() => {\n if (!item) {\n return;\n }\n\n window.document.body.style.cursor = 'grabbing';\n\n return () => {\n window.document.body.style.cursor = '';\n };\n }, [item]);\n\n return <DragOverlay>{child}</DragOverlay>;\n};\n","'use client';\n\nimport {useContext} from 'react';\nimport {SortableContext} from '@dnd-kit/sortable';\n\nimport {DataGridSettingsContext} from '../DataGridSettingsContext';\n\nimport {AreaItem} from './AreaItem';\n\nimport type {ReactNode} from 'react';\nimport type {ColumnItem, ColumnItemId, DataGridSettingsActiveItem} from '../types';\n\ntype GetItem = {\n id: ColumnItemId;\n item: ColumnItem;\n activeItem: DataGridSettingsActiveItem | undefined;\n isSearch: boolean;\n};\n\nconst getItem = ({id, item, isSearch, activeItem}: GetItem) => {\n const props = {\n id,\n item,\n isSearch,\n isActive: false,\n isAbove: false,\n isBelow: false,\n };\n\n if (activeItem) {\n props.isActive = item.id === activeItem.id;\n\n if (item.id === activeItem.overId) {\n props.isAbove = !!activeItem.isAbove;\n props.isBelow = !activeItem.isAbove;\n }\n }\n\n return <AreaItem key={item.id} {...props} />;\n};\n\ntype ItemsProps = {\n itemIds: ColumnItemId[];\n activeItem?: DataGridSettingsActiveItem;\n};\n\nexport const Items: React.FC<ItemsProps> = ({itemIds, activeItem}) => {\n const {itemsById, searchItems} = useContext(DataGridSettingsContext);\n\n const child: ReactNode[] = [];\n const newItemIds: ColumnItemId[] = [];\n\n for (const itemId of itemIds) {\n const item = itemsById.get(itemId);\n if (!item) {\n continue;\n }\n\n const newId = itemId === activeItem?.id ? `${itemId}Placeholder` : itemId;\n const isSearch = searchItems.includes(itemId);\n\n newItemIds.push(newId);\n child.push(getItem({item, activeItem, isSearch, id: newId}));\n }\n\n return <SortableContext items={newItemIds}>{child}</SortableContext>;\n};\n\nexport {ActiveItemOverlay} from './AreaItem';\n","import styled from '@emotion/styled';\nimport {useDroppable} from '@dnd-kit/core';\n\nimport {Placement} from '@join-x5/react-theme';\nimport {Tooltip} from '@join-x5/react';\n\nimport {Items} from '../AreaItem';\nimport {ColumnArea} from '../types';\n\nimport type {ColumnItemId, DataGridSettingsActiveItem, ItemsById} from '../types';\n\nimport type {PropsWithChildren} from '@join-x5/react-theme';\n\nconst Container = styled.div`\n position: relative;\n min-height: 32px;\n`;\n\nconst Content = styled.div`\n min-height: 32px;\n`;\n\nconst Header = styled.div`\n position: relative;\n padding: 6px 8px;\n border-radius: 8px 8px 0 0;\n text-align: center;\n user-select: none;\n z-index: 1;\n\n ${({theme}) => ({\n ...theme.typography.p2,\n\n color: theme.colors.white,\n })}\n`;\n\nconst Placeholder = styled.div`\n padding: 8px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n user-select: none;\n\n ${({theme}) => ({\n ...theme.typography.p2,\n\n color: theme.colors.grey[60],\n })}\n`;\n\nconst FixedContainer = styled.div<{isOver: boolean}>`\n position: relative;\n\n ::after {\n content: '';\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n box-sizing: border-box;\n border-radius: 8px;\n border-width: 2px;\n border-style: dashed;\n pointer-events: none;\n }\n\n ${({theme, isOver}) => {\n return `\n ::after {\n border-color: ${isOver ? theme.colors.accent[80] : theme.colors.grey[60]};\n }\n\n ${Header} {\n background-color: ${isOver ? theme.colors.accent[80] : theme.colors.grey[50]};\n }\n\n ${Placeholder} {\n background-color: ${isOver ? theme.colors.accent[10] : undefined};\n }\n `;\n }}\n`;\n\ntype AreaProps = {\n id: string;\n area: ColumnArea;\n isEmpty: boolean;\n isOverItems: boolean;\n isWithHeader: boolean;\n} & PropsWithChildren;\n\nconst DefaultArea: React.FC<AreaProps> = ({children, id, area}) => {\n const {setNodeRef} = useDroppable({id, data: {area}});\n\n return <Container ref={setNodeRef}>{children}</Container>;\n};\n\nconst FixedArea: React.FC<AreaProps> = ({children, id, area, isEmpty, isOverItems, isWithHeader}) => {\n const {isOver, setNodeRef} = useDroppable({id, data: {area}});\n\n if (isEmpty) {\n const placeholderText = `Перетащите столбец сюда, чтобы\n закрепить его ${area === ColumnArea.FixedLeft ? 'слева' : 'справа'} от таблицы`;\n\n return (\n <FixedContainer ref={setNodeRef} isOver={isOver || isOverItems}>\n <Header hidden={!isWithHeader}>Область для закрепления столбца</Header>\n <Content>\n <Tooltip placement={Placement.Right} content={placeholderText} whiteSpace=\"pre-line\">\n <Placeholder>{placeholderText}</Placeholder>\n </Tooltip>\n </Content>\n </FixedContainer>\n );\n }\n\n return (\n <FixedContainer ref={setNodeRef} isOver={isOver || isOverItems}>\n <Header hidden={!isWithHeader}>Область для закрепления столбца</Header>\n <Content>{children}</Content>\n </FixedContainer>\n );\n};\n\ntype GetArea = {\n columnIndex: number;\n area: ColumnArea;\n itemIds: ColumnItemId[];\n itemsById: ItemsById;\n activeItem: DataGridSettingsActiveItem | undefined;\n searchItems: ColumnItemId[];\n};\n\nexport const getArea = ({columnIndex, area, itemIds, itemsById, activeItem}: GetArea) => {\n const Component = area === ColumnArea.Default ? DefaultArea : FixedArea;\n\n const isWithHeader = area === ColumnArea.FixedLeft && columnIndex === 0;\n const isSingleItemActive = itemIds.length === 1 && itemIds[0] === activeItem?.id;\n const isFixedArea = area !== ColumnArea.Default;\n\n const isEmpty = itemIds.length === 0 || (isSingleItemActive && isFixedArea);\n const isOverItems = itemIds.findIndex(itemId => itemsById.get(itemId)?.id === activeItem?.overId) !== -1;\n\n const props: AreaProps = {\n area,\n isEmpty,\n isOverItems,\n isWithHeader,\n\n id: `${columnIndex}_${area}`,\n };\n\n return (\n <Component key={props.id} {...props}>\n <Items itemIds={itemIds} activeItem={activeItem} />\n </Component>\n );\n};\n","'use client';\n\nimport {useContext, useRef, useState} from 'react';\nimport styled from '@emotion/styled';\n\nimport {SizeTokenValue} from '@join-x5/react-theme';\nimport {SearchInput} from '@join-x5/react';\n\nimport {DataGridSettingsContext} from '../DataGridSettingsContext';\n\nimport type {ChangeEventHandler} from 'react';\nimport type {ColumnItemId} from '../types';\n\nconst Container = styled.div`\n margin-bottom: 16px;\n`;\n\nexport const Search: React.FC = () => {\n const {items, setSearchItems, qa} = useContext(DataGridSettingsContext);\n const [value, setValue] = useState<string>('');\n const inputTimeout = useRef<ReturnType<typeof setTimeout>>();\n\n const onChange: ChangeEventHandler<HTMLInputElement> = e => {\n const newSearchValue = e.target.value.toLowerCase().trim();\n\n clearTimeout(inputTimeout.current);\n setValue(e.target.value);\n\n inputTimeout.current = setTimeout(() => {\n if (!newSearchValue) {\n setSearchItems([]);\n return;\n }\n\n const newSearchItems = items.reduce((acc, item) => {\n if (item.name.toLowerCase().includes(newSearchValue)) {\n acc.push(item.id);\n }\n\n return acc;\n }, [] as ColumnItemId[]);\n\n setSearchItems(newSearchItems);\n }, 100);\n };\n\n return (\n <Container>\n <SearchInput size={SizeTokenValue.Small} value={value} onChange={onChange} label=\"Поиск\" qa={`${qa}-search`} />\n </Container>\n );\n};\n","import {rectIntersection} from '@dnd-kit/core';\n\nimport {ColumnArea} from '../types';\n\nimport type {Active, CollisionDetection, Over} from '@dnd-kit/core';\nimport type {ColumnItem, DataGridSettingsActiveItem, ItemsById} from '../types';\n\nexport const moveItem = (items: ColumnItem[], active: DataGridSettingsActiveItem, over: Over): ColumnItem[] => {\n const areaFactor = {\n [ColumnArea.Default]: 0,\n [ColumnArea.FixedLeft]: -1,\n [ColumnArea.FixedRight]: 1,\n };\n\n let newItems = [...items]\n .sort((a, b) => {\n const aSort = a.sort + items.length * areaFactor[a.area];\n const bSort = b.sort + items.length * areaFactor[b.area];\n\n return aSort - bSort;\n })\n .map((item, sort) => ({...item, sort}));\n\n const overItem = newItems.find(item => item.id === over.id);\n\n if (!overItem) {\n const newArea: ColumnArea | undefined = over.data?.current?.area;\n if (newArea) {\n newItems = newItems.map(item => (item.id === active.id ? {...item, area: newArea} : item));\n }\n\n return newItems;\n }\n\n const newSort = overItem.sort + (active.isAbove ? 0 : 1);\n\n const [relativeItems, fixedItems] = newItems.reduce(\n (acc, item) => {\n acc[+item.isLocked].push(item);\n return acc;\n },\n [[], []] as [ColumnItem[], ColumnItem[]]\n );\n\n newItems = relativeItems.map(item => {\n if (item.id === active.id) {\n return {...item, sort: newSort, area: overItem.area};\n }\n\n if (item.sort >= newSort) {\n return {...item, sort: item.sort + 1};\n }\n\n return item;\n });\n\n newItems.sort((a, b) => a.sort - b.sort);\n\n for (const item of fixedItems) {\n newItems.splice(item.sort, 0, item);\n }\n\n return newItems.map((item, sort) => ({...item, sort}));\n};\n\nexport const moveOver = (itemsById: ItemsById, active: Active, over: Over) => {\n const overItem = itemsById.get(over.id);\n if (!overItem) {\n return {overId: undefined, isAbove: undefined};\n }\n\n const isFirst = over.data?.current?.sortable?.index === 0;\n const offsetTop = active.rect?.current?.translated?.top;\n\n const isAbove = isFirst && !!offsetTop && offsetTop < over.rect?.top;\n\n return {overId: overItem.id, isAbove};\n};\n\nexport const collisionDetection: CollisionDetection = args => {\n const rectResult = rectIntersection(args);\n\n if (rectResult.length === 2) {\n try {\n const sortables = rectResult.filter(item => !!item.data?.droppableContainer?.data?.current?.sortable);\n if (sortables.length === 1) {\n return sortables;\n }\n //eslint-disable-next-line no-empty\n } catch {}\n }\n\n return rectResult;\n};\n","'use client';\n\nimport {MouseSensor, TouchSensor, useSensor, useSensors} from '@dnd-kit/core';\n\nimport {useContext, useState} from 'react';\n\nimport {useUpdateEffect} from '@join-x5/react-theme';\n\nimport {DataGridSettingsContext} from '../DataGridSettingsContext';\n\nimport {moveItem, moveOver, collisionDetection} from './utils';\n\nimport type {DndContextProps} from '@dnd-kit/core';\nimport type {DataGridSettingsActiveItem} from '../types';\n\nexport const useColumns = () => {\n const {columns, items, setItems, itemsById, searchItems} = useContext(DataGridSettingsContext);\n const [activeItem, setActiveItem] = useState<DataGridSettingsActiveItem>();\n const sensors = useSensors(useSensor(MouseSensor), useSensor(TouchSensor));\n\n const onDragCancel = () => {\n setActiveItem(undefined);\n };\n\n const onDragStart: DndContextProps['onDragStart'] = args => {\n const newActiveItem = itemsById.get(args.active.id);\n setActiveItem(newActiveItem);\n };\n\n const onDragMove: DndContextProps['onDragMove'] = ({over, active}) => {\n if (!activeItem || !over) {\n if (activeItem && activeItem.overId !== undefined) {\n setActiveItem({...activeItem, overId: undefined, isAbove: undefined});\n }\n\n return;\n }\n\n const {overId, isAbove} = moveOver(itemsById, active, over);\n\n if (activeItem.overId === overId && activeItem.isAbove === isAbove) {\n return;\n }\n\n setActiveItem({...activeItem, overId, isAbove});\n };\n\n const onDragEnd: DndContextProps['onDragEnd'] = ({over}) => {\n if (!activeItem || !over) {\n if (activeItem) {\n setActiveItem(undefined);\n }\n\n return;\n }\n\n setActiveItem(undefined);\n setItems(moveItem(items, activeItem, over));\n };\n\n useUpdateEffect(() => {\n setActiveItem(undefined);\n }, [items]);\n\n return {\n columns,\n itemsById,\n searchItems,\n activeItem,\n sensors,\n onDragStart,\n onDragMove,\n onDragEnd,\n onDragCancel,\n collisionDetection,\n };\n};\n","import styled from '@emotion/styled';\nimport {DndContext} from '@dnd-kit/core';\n\nimport {ModalContent as BaseModalContent} from '@join-x5/react';\n\nimport {getArea} from '../Area';\nimport {ActiveItemOverlay} from '../AreaItem';\nimport {Search} from '../Search';\n\nimport {useColumns} from './hook';\n\nimport type {ReactNode} from 'react';\n\nconst ModalContent = styled(BaseModalContent)`\n padding: 0 24px 16px;\n`;\n\nconst Container = styled.div`\n display: flex;\n margin-left: -32px;\n\n > div {\n display: flex;\n position: relative;\n flex-direction: column;\n gap: 4px;\n box-sizing: border-box;\n padding-left: 32px;\n\n ::after {\n content: '';\n position: absolute;\n width: 0;\n height: 100%;\n top: 0;\n left: 16px;\n border-left: 1px solid ${props => props.theme.colors.grey[10]};\n }\n\n :first-of-type::after {\n display: none;\n }\n }\n`;\n\nexport const Columns: React.FC = () => {\n const {columns, itemsById, searchItems, activeItem, ...rest} = useColumns();\n\n const child = columns.map((column, columnIndex) => {\n const areas: ReactNode[] = Array.from(column).map(([area, itemIds]) =>\n getArea({columnIndex, area, itemIds, itemsById, searchItems, activeItem})\n );\n\n const width = `calc(${100 / columns.length}%)`;\n\n return (\n <div key={columnIndex} style={{width}}>\n {areas}\n </div>\n );\n });\n\n return (\n <ModalContent noBorderScroll>\n <Search />\n <DndContext id=\"DataGridSettings\" {...rest}>\n <Container>{child}</Container>\n <ActiveItemOverlay item={activeItem} />\n </DndContext>\n </ModalContent>\n );\n};\n","'use client';\n\nimport {useContext, useRef, useState} from 'react';\nimport styled from '@emotion/styled';\n\nimport {Placement, SizeTokenValue} from '@join-x5/react-theme';\nimport {\n Button,\n ButtonVariant,\n IconButton,\n ModalFooterContent,\n Dropdown,\n DropdownContent as BaseDropdownContent,\n} from '@join-x5/react';\n\nimport {MoreHorizontalIcon} from '@join-x5/react-icons';\n\nimport {DataGridSettingsContext} from '../DataGridSettingsContext';\n\nimport type {RequiredQA} from '@join-x5/react-theme';\n\nconst DropdownContent = styled(BaseDropdownContent)`\n overflow: hidden;\n`;\n\nconst DropdownButton = styled.button`\n width: 100%;\n padding: 6px 12px;\n border: 0;\n outline: none;\n background: none;\n text-align: left;\n cursor: pointer;\n\n ${props => props.theme.typography.p1compact}\n\n :hover {\n background-color: ${props => props.theme.colors.grey[10]};\n }\n`;\n\ntype DropdownButtonsProps = {\n isAllVisible: boolean;\n onReset: () => void;\n onToggleVisible: () => void;\n} & RequiredQA;\n\nconst DropdownButtons: React.FC<DropdownButtonsProps> = ({isAllVisible, qa, ...props}) => {\n const [isOpen, setIsOpen] = useState(false);\n const ref = useRef<HTMLButtonElement>(null);\n\n const onToggle = () => setIsOpen(!isOpen);\n\n const onReset = () => {\n setIsOpen(false);\n props.onReset();\n };\n\n const onToggleVisible = () => {\n setIsOpen(false);\n props.onToggleVisible();\n };\n\n return (\n <ModalFooterContent>\n <IconButton\n ref={ref}\n size={SizeTokenValue.Small}\n variant={ButtonVariant.InnerInput}\n onClick={onToggle}\n qa={`${qa}-footer-dropdown`}\n >\n <MoreHorizontalIcon size={SizeTokenValue.Small} />\n </IconButton>\n <Dropdown width=\"152px\" placement={Placement.TopStart} isOpen={isOpen} setIsOpen={setIsOpen} targetRef={ref}>\n <DropdownContent>\n <DropdownButton type=\"button\" onClick={onReset} data-qa={`${qa}-reset`}>\n По умолчанию\n </DropdownButton>\n <DropdownButton type=\"button\" onClick={onToggleVisible} data-qa={`${qa}-toggle-visible`}>\n {isAllVisible ? 'Скрыть все' : 'Показать все'}\n </DropdownButton>\n </DropdownContent>\n </Dropdown>\n </ModalFooterContent>\n );\n};\n\nexport const LeftButtons: React.FC = () => {\n const {items, defaultItems, setItems, columns, qa} = useContext(DataGridSettingsContext);\n\n const isAllVisible = items.findIndex(item => !item.isVisible) === -1;\n\n const onReset = () => setItems(defaultItems);\n\n const onToggleVisible = () => {\n const newItems = items.map(item => ({...item, isVisible: item.isAlwaysVisible || !isAllVisible}));\n\n setItems(newItems);\n };\n\n if (columns.length === 1) {\n return <DropdownButtons isAllVisible={isAllVisible} onReset={onReset} onToggleVisible={onToggleVisible} qa={qa} />;\n }\n\n return (\n <ModalFooterContent>\n <Button size={SizeTokenValue.Small} variant={ButtonVariant.Ghost} onClick={onReset} qa={`${qa}-reset`}>\n По умолчанию\n </Button>\n <Button\n size={SizeTokenValue.Small}\n variant={ButtonVariant.Ghost}\n onClick={onToggleVisible}\n qa={`${qa}-toggle-visible`}\n >\n {isAllVisible ? 'Скрыть все' : 'Показать все'}\n </Button>\n </ModalFooterContent>\n );\n};\n","'use client';\n\nimport {useContext} from 'react';\nimport styled from '@emotion/styled';\n\nimport {SizeTokenValue} from '@join-x5/react-theme';\nimport {Button, ButtonVariant, ModalFooter as BaseModalFooter, ModalFooterContent} from '@join-x5/react';\n\nimport {DataGridSettingsContext} from '../DataGridSettingsContext';\n\nimport {LeftButtons} from './LeftButtons';\n\nconst ModalFooter = styled(BaseModalFooter)`\n padding: 20px 24px 20px 16px;\n border-top: 1px solid ${props => props.theme.colors.grey[20]};\n`;\n\nexport const Footer: React.FC = () => {\n const context = useContext(DataGridSettingsContext);\n const {items, setIsOpen, qa} = context;\n\n const onClose = () => setIsOpen(false);\n const onSave = () => context.onSave(items);\n\n return (\n <ModalFooter>\n <LeftButtons />\n <ModalFooterContent>\n <Button size={SizeTokenValue.Small} variant={ButtonVariant.Outlined} onClick={onClose} qa={`${qa}-cancel`}>\n Отменить\n </Button>\n <Button size={SizeTokenValue.Small} variant={ButtonVariant.Primary} onClick={onSave} qa={`${qa}-save`}>\n Применить\n </Button>\n </ModalFooterContent>\n </ModalFooter>\n );\n};\n","import {SizeTokenValue} from '@join-x5/react-theme';\n\nimport {ColumnArea} from './types';\n\nimport type {ColumnData, ColumnItem, ItemsById} from './types';\n\nexport const getColumnsData = (items: ColumnItem[], areas: ColumnArea[]) => {\n const columns: ColumnData[] = [];\n const itemsById: ItemsById = new Map();\n\n const areaFactor = {\n [ColumnArea.Default]: 0,\n [ColumnArea.FixedLeft]: -1,\n [ColumnArea.FixedRight]: 1,\n };\n\n const sortedItems = [...items].sort((a, b) => {\n const aSort = a.sort + items.length * areaFactor[a.area];\n const bSort = b.sort + items.length * areaFactor[b.area];\n\n return aSort - bSort;\n });\n\n const withFixedLeft = areas.includes(ColumnArea.FixedLeft);\n const withFixedRight = areas.includes(ColumnArea.FixedRight);\n\n const itemsInColumn = (() => {\n const ITEMS_IN_COLUMN = 15;\n const COLUMNS_MAX = 4;\n\n const rem = Math.ceil(items.length / ITEMS_IN_COLUMN);\n const columnsCount = rem > COLUMNS_MAX ? COLUMNS_MAX : rem;\n\n const result = Math.ceil(items.length / columnsCount);\n\n return (result > ITEMS_IN_COLUMN ? result : ITEMS_IN_COLUMN) + (withFixedLeft || withFixedRight ? 1 : 0);\n })();\n\n while (sortedItems.length > 0) {\n const isFirstColumn = columns.length === 0;\n\n const hasFixedLeftArea = isFirstColumn && withFixedLeft;\n const hasFixedLeftItems = sortedItems[0]?.area === ColumnArea.FixedLeft;\n\n const newItemsInColumn = itemsInColumn - (hasFixedLeftArea ? 2 - +hasFixedLeftItems : 0);\n const columnItems = sortedItems.splice(0, newItemsInColumn);\n\n const hasFixedRightArea = sortedItems.length === 0 && withFixedRight;\n const hasFixedRightItems = columnItems.findIndex(item => item.area === ColumnArea.FixedRight) !== -1;\n\n const column: ColumnData = new Map();\n\n if (hasFixedLeftArea || hasFixedLeftItems) {\n column.set(ColumnArea.FixedLeft, []);\n }\n\n column.set(ColumnArea.Default, []);\n\n if (hasFixedRightArea || hasFixedRightItems) {\n column.set(ColumnArea.FixedRight, []);\n }\n\n for (const columnItem of columnItems) {\n const area = column.get(columnItem.area);\n if (!area) {\n continue;\n }\n\n itemsById.set(columnItem.id, columnItem);\n area.push(columnItem.id);\n }\n\n const defaultAreaIsEmpty = column.get(ColumnArea.Default)?.length === 0;\n\n if (defaultAreaIsEmpty) {\n column.delete(ColumnArea.Default);\n }\n\n columns.push(column);\n }\n\n const noDefaultColumnAdded = columns.findIndex(column => column.has(ColumnArea.Default)) === -1;\n if (noDefaultColumnAdded && columns.length) {\n const fixedRightIndex = columns.findIndex(column => column.has(ColumnArea.FixedRight));\n\n if (fixedRightIndex !== -1) {\n const columnAreas = columns[fixedRightIndex];\n const rightItems = columnAreas.get(ColumnArea.FixedRight);\n\n if (rightItems) {\n columnAreas.delete(ColumnArea.FixedRight);\n columnAreas.set(ColumnArea.Default, []);\n columnAreas.set(ColumnArea.FixedRight, rightItems);\n } else {\n columnAreas.set(ColumnArea.Default, []);\n }\n } else {\n columns[columns.length - 1].set(ColumnArea.Default, []);\n }\n }\n\n const size = ((): SizeTokenValue => {\n switch (columns.length) {\n case 1:\n return SizeTokenValue.Small;\n case 2:\n return SizeTokenValue.Medium;\n case 3:\n return SizeTokenValue.Large;\n }\n\n return SizeTokenValue.XLarge;\n })();\n\n return {columns, itemsById, size};\n};\n","'use client';\n\nimport {useMemo, useState} from 'react';\n\nimport {useUpdateEffect} from '@join-x5/react-theme';\nimport {Modal, ModalHeader} from '@join-x5/react';\n\nimport {Columns} from './Columns';\nimport {Footer} from './Footer';\nimport {DataGridSettingsContext} from './DataGridSettingsContext';\nimport {getColumnsData} from './utils';\nimport {ColumnArea} from './types';\n\nimport type {ColumnItem, ColumnItemId, DataGridSettingsProps} from './types';\n\nexport const DataGridSettings: React.FC<DataGridSettingsProps> = props => {\n const {\n isOpen,\n\n qa = 'datagridsettings',\n areas = [ColumnArea.FixedLeft, ColumnArea.Default],\n\n ...rest\n } = props;\n\n const [items, setItems] = useState<ColumnItem[]>(props.items);\n const [searchItems, setSearchItems] = useState<ColumnItemId[]>([]);\n\n const {columns, itemsById, size} = useMemo(() => getColumnsData(items, areas), [items, areas]);\n\n const context = {...rest, columns, itemsById, areas, items, setItems, searchItems, setSearchItems, qa};\n\n const onClose = () => props.setIsOpen(false);\n\n useUpdateEffect(() => {\n setItems(props.items);\n }, [props.items]);\n\n useUpdateEffect(() => {\n if (!isOpen) {\n setTimeout(() => setSearchItems([]));\n }\n }, [isOpen]);\n\n const modalProps = {isOpen, onClose, qa, size};\n\n return (\n <Modal {...modalProps}>\n <ModalHeader onClose={onClose}>Настройка таблицы</ModalHeader>\n <DataGridSettingsContext.Provider value={context}>\n <Columns />\n <Footer />\n </DataGridSettingsContext.Provider>\n </Modal>\n );\n};\n"],"names":["DataGridSettingsContext","createContext","items","defaultItems","areas","columns","itemsById","Map","searchItems","setSearchItems","setIsOpen","setItems","onSave","qa","ColumnArea","Default","FixedLeft","FixedRight","Container","_styled","process","env","NODE_ENV","target","label","props","theme","colors","grey","isVisible","typography","p1","Content","item","name","title","isOverflown","setIsOverflown","useState","ref","useRef","noTooltip","undefined","useEffect","current","scrollWidth","clientWidth","Tooltip","Placement","Top","jsx","HandleContainer","isLocked","Handle","child","DragIndicatorVerticalIcon","SizeTokenValue","Small","Visibility","id","isAlwaysVisible","useContext","toggleVisible","map","Icon","VisibilityOnIcon","VisibilityOffIcon","tooltip","placement","content","IconButton","XSmall","ButtonVariant","InnerInput","styles","toString","_EMOTION_STRINGIFIED_CSS_ERROR__","ItemContent","memo","listeners","handleRef","handleProps","style","cursor","jsxs","BaseContainer","Placeholder","Dragging","white","baseTheme","shadows","medium","accent","AreaItem","isActive","isAbove","isBelow","isSearch","setNodeRef","setActivatorNodeRef","transform","transition","useSortable","Math","round","x","y","scaleX","scaleY","area","ActiveItemOverlay","window","document","body","DragOverlay","getItem","activeItem","overId","Items","itemIds","newItemIds","itemId","get","newId","includes","push","SortableContext","Header","p2","color","FixedContainer","isOver","DefaultArea","children","useDroppable","data","FixedArea","isEmpty","isOverItems","isWithHeader","placeholderText","Right","getArea","columnIndex","Component","isSingleItemActive","length","isFixedArea","findIndex","Search","value","setValue","inputTimeout","onChange","e","newSearchValue","toLowerCase","trim","clearTimeout","setTimeout","newSearchItems","reduce","acc","SearchInput","moveItem","active","over","areaFactor","newItems","sort","a","b","aSort","bSort","overItem","find","newArea","newSort","relativeItems","fixedItems","splice","moveOver","isFirst","sortable","index","offsetTop","rect","translated","top","collisionDetection","args","rectResult","rectIntersection","sortables","filter","droppableContainer","useColumns","setActiveItem","sensors","useSensors","useSensor","MouseSensor","TouchSensor","onDragCancel","onDragStart","newActiveItem","onDragMove","onDragEnd","useUpdateEffect","ModalContent","BaseModalContent","Columns","rest","column","Array","from","width","DndContext","DropdownContent","BaseDropdownContent","DropdownButton","p1compact","DropdownButtons","isAllVisible","isOpen","onToggle","onReset","onToggleVisible","ModalFooterContent","MoreHorizontalIcon","Dropdown","TopStart","LeftButtons","Button","Ghost","ModalFooter","BaseModalFooter","Footer","context","onClose","Outlined","Primary","getColumnsData","sortedItems","withFixedLeft","withFixedRight","itemsInColumn","rem","ceil","ITEMS_IN_COLUMN","columnsCount","COLUMNS_MAX","result","hasFixedLeftArea","hasFixedLeftItems","newItemsInColumn","columnItems","hasFixedRightArea","hasFixedRightItems","set","columnItem","delete","has","fixedRightIndex","columnAreas","rightItems","size","Medium","Large","XLarge","DataGridSettings","useMemo","modalProps","Modal","ModalHeader"],"mappings":"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"}
|
package/dist/types.es.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.es.js","sources":["../src/types.ts"],"sourcesContent":["import type {ReactNode} from 'react';\nimport type {QA} from '@join-x5/react-theme';\n\nexport enum ColumnArea {\n /** Не закреплен */\n Default = 'default',\n\n /** Закреплен слева */\n FixedLeft = 'fixedLeft',\n\n /** Закреплен справа */\n FixedRight = 'fixedRight',\n}\n\n/** Идентификатор колонки */\nexport type ColumnItemId = string | number;\n\nexport type ColumnItem = {\n /** Идентификатор */\n id: ColumnItemId;\n\n /** Название\n *\n * Используется при поиске\n */\n name: string;\n\n /** Контент\n *\n * Текстовый контент сокращается через text-overflow: ellipsis\n */\n title: ReactNode;\n\n /** Область элемента */\n area: ColumnArea;\n\n /** Расположение элемента */\n sort: number;\n\n /** Видимость */\n isVisible: boolean;\n\n /** Всегда видим */\n isAlwaysVisible: boolean;\n\n /** Закреплен\n *\n * Сохраняет свою позицию\n */\n isLocked: boolean;\n};\n\nexport type DataGridSettingsProps = {\n /** Раскрыта ли модалка */\n isOpen: boolean;\n\n /** Обработчик раскрытия модалки */\n setIsOpen: (newIsOpen: boolean) => void;\n\n /** Элементы списка */\n items: ColumnItem[];\n\n /** Элементы по умолчанию\n *\n * Используется при нажатии кнопки \"По умолчанию\"\n */\n defaultItems: ColumnItem[];\n\n /** Доступные области\n *\n * По умолчанию [ColumnArea.FixedLeft, ColumnArea.Default]\n */\n areas?: ColumnArea[];\n\n /** Обработчик сохранения изменений */\n onSave: (newItems: ColumnItem[]) => void;\n} & QA;\n\nexport type DataGridSettingsActiveItem = {\n overId?: ColumnItemId;\n isAbove?: boolean;\n} & ColumnItem;\n\nexport type ColumnData = Map<ColumnArea, ColumnItemId[]>;\nexport type ItemsById = Map<ColumnItemId, ColumnItem>;\n"],"names":["ColumnArea","Default","FixedLeft","FixedRight"],"mappings":"
|
|
1
|
+
{"version":3,"file":"types.es.js","sources":["../src/types.ts"],"sourcesContent":["import type {ReactNode} from 'react';\nimport type {QA} from '@join-x5/react-theme';\n\nexport enum ColumnArea {\n /** Не закреплен */\n Default = 'default',\n\n /** Закреплен слева */\n FixedLeft = 'fixedLeft',\n\n /** Закреплен справа */\n FixedRight = 'fixedRight',\n}\n\n/** Идентификатор колонки */\nexport type ColumnItemId = string | number;\n\nexport type ColumnItem = {\n /** Идентификатор */\n id: ColumnItemId;\n\n /** Название\n *\n * Используется при поиске\n */\n name: string;\n\n /** Контент\n *\n * Текстовый контент сокращается через text-overflow: ellipsis\n */\n title: ReactNode;\n\n /** Область элемента */\n area: ColumnArea;\n\n /** Расположение элемента */\n sort: number;\n\n /** Видимость */\n isVisible: boolean;\n\n /** Всегда видим */\n isAlwaysVisible: boolean;\n\n /** Закреплен\n *\n * Сохраняет свою позицию\n */\n isLocked: boolean;\n};\n\nexport type DataGridSettingsProps = {\n /** Раскрыта ли модалка */\n isOpen: boolean;\n\n /** Обработчик раскрытия модалки */\n setIsOpen: (newIsOpen: boolean) => void;\n\n /** Элементы списка */\n items: ColumnItem[];\n\n /** Элементы по умолчанию\n *\n * Используется при нажатии кнопки \"По умолчанию\"\n */\n defaultItems: ColumnItem[];\n\n /** Доступные области\n *\n * По умолчанию [ColumnArea.FixedLeft, ColumnArea.Default]\n */\n areas?: ColumnArea[];\n\n /** Обработчик сохранения изменений */\n onSave: (newItems: ColumnItem[]) => void;\n} & QA;\n\nexport type DataGridSettingsActiveItem = {\n overId?: ColumnItemId;\n isAbove?: boolean;\n} & ColumnItem;\n\nexport type ColumnData = Map<ColumnArea, ColumnItemId[]>;\nexport type ItemsById = Map<ColumnItemId, ColumnItem>;\n"],"names":["ColumnArea","Default","FixedLeft","FixedRight"],"mappings":"AAGO,IAAKA,sBAAAA,OAEVC,EAAAA,UAAU,WAGVC,EAAAA,YAAY,aAGZC,EAAAA,aAAa,cARHH,IAAAA,KAAAA,CAAAA,CAAAA;"}
|
package/dist/utils.es.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.es.js","sources":["../src/utils.ts"],"sourcesContent":["import {SizeTokenValue} from '@join-x5/react-theme';\n\nimport {ColumnArea} from './types';\n\nimport type {ColumnData, ColumnItem, ItemsById} from './types';\n\nexport const getColumnsData = (items: ColumnItem[], areas: ColumnArea[]) => {\n const columns: ColumnData[] = [];\n const itemsById: ItemsById = new Map();\n\n const areaFactor = {\n [ColumnArea.Default]: 0,\n [ColumnArea.FixedLeft]: -1,\n [ColumnArea.FixedRight]: 1,\n };\n\n const sortedItems = [...items].sort((a, b) => {\n const aSort = a.sort + items.length * areaFactor[a.area];\n const bSort = b.sort + items.length * areaFactor[b.area];\n\n return aSort - bSort;\n });\n\n const withFixedLeft = areas.includes(ColumnArea.FixedLeft);\n const withFixedRight = areas.includes(ColumnArea.FixedRight);\n\n const itemsInColumn = (() => {\n const ITEMS_IN_COLUMN = 15;\n const COLUMNS_MAX = 4;\n\n const rem = Math.ceil(items.length / ITEMS_IN_COLUMN);\n const columnsCount = rem > COLUMNS_MAX ? COLUMNS_MAX : rem;\n\n const result = Math.ceil(items.length / columnsCount);\n\n return (result > ITEMS_IN_COLUMN ? result : ITEMS_IN_COLUMN) + (withFixedLeft || withFixedRight ? 1 : 0);\n })();\n\n while (sortedItems.length > 0) {\n const isFirstColumn = columns.length === 0;\n\n const hasFixedLeftArea = isFirstColumn && withFixedLeft;\n const hasFixedLeftItems = sortedItems[0]?.area === ColumnArea.FixedLeft;\n\n const newItemsInColumn = itemsInColumn - (hasFixedLeftArea ? 2 - +hasFixedLeftItems : 0);\n const columnItems = sortedItems.splice(0, newItemsInColumn);\n\n const hasFixedRightArea = sortedItems.length === 0 && withFixedRight;\n const hasFixedRightItems = columnItems.findIndex(item => item.area === ColumnArea.FixedRight) !== -1;\n\n const column: ColumnData = new Map();\n\n if (hasFixedLeftArea || hasFixedLeftItems) {\n column.set(ColumnArea.FixedLeft, []);\n }\n\n column.set(ColumnArea.Default, []);\n\n if (hasFixedRightArea || hasFixedRightItems) {\n column.set(ColumnArea.FixedRight, []);\n }\n\n for (const columnItem of columnItems) {\n const area = column.get(columnItem.area);\n if (!area) {\n continue;\n }\n\n itemsById.set(columnItem.id, columnItem);\n area.push(columnItem.id);\n }\n\n const defaultAreaIsEmpty = column.get(ColumnArea.Default)?.length === 0;\n\n if (defaultAreaIsEmpty) {\n column.delete(ColumnArea.Default);\n }\n\n columns.push(column);\n }\n\n const noDefaultColumnAdded = columns.findIndex(column => column.has(ColumnArea.Default)) === -1;\n if (noDefaultColumnAdded && columns.length) {\n const fixedRightIndex = columns.findIndex(column => column.has(ColumnArea.FixedRight));\n\n if (fixedRightIndex !== -1) {\n const columnAreas = columns[fixedRightIndex];\n const rightItems = columnAreas.get(ColumnArea.FixedRight);\n\n if (rightItems) {\n columnAreas.delete(ColumnArea.FixedRight);\n columnAreas.set(ColumnArea.Default, []);\n columnAreas.set(ColumnArea.FixedRight, rightItems);\n } else {\n columnAreas.set(ColumnArea.Default, []);\n }\n } else {\n columns[columns.length - 1].set(ColumnArea.Default, []);\n }\n }\n\n const size = ((): SizeTokenValue => {\n switch (columns.length) {\n case 1:\n return SizeTokenValue.Small;\n case 2:\n return SizeTokenValue.Medium;\n case 3:\n return SizeTokenValue.Large;\n }\n\n return SizeTokenValue.XLarge;\n })();\n\n return {columns, itemsById, size};\n};\n"],"names":["getColumnsData","items","areas","columns","itemsById","Map","areaFactor","ColumnArea","Default","FixedLeft","FixedRight","sortedItems","sort","a","b","aSort","length","area","bSort","withFixedLeft","includes","withFixedRight","itemsInColumn","rem","Math","ceil","ITEMS_IN_COLUMN","columnsCount","COLUMNS_MAX","result","hasFixedLeftArea","hasFixedLeftItems","newItemsInColumn","columnItems","splice","hasFixedRightArea","hasFixedRightItems","findIndex","item","column","set","columnItem","get","id","push","delete","
|
|
1
|
+
{"version":3,"file":"utils.es.js","sources":["../src/utils.ts"],"sourcesContent":["import {SizeTokenValue} from '@join-x5/react-theme';\n\nimport {ColumnArea} from './types';\n\nimport type {ColumnData, ColumnItem, ItemsById} from './types';\n\nexport const getColumnsData = (items: ColumnItem[], areas: ColumnArea[]) => {\n const columns: ColumnData[] = [];\n const itemsById: ItemsById = new Map();\n\n const areaFactor = {\n [ColumnArea.Default]: 0,\n [ColumnArea.FixedLeft]: -1,\n [ColumnArea.FixedRight]: 1,\n };\n\n const sortedItems = [...items].sort((a, b) => {\n const aSort = a.sort + items.length * areaFactor[a.area];\n const bSort = b.sort + items.length * areaFactor[b.area];\n\n return aSort - bSort;\n });\n\n const withFixedLeft = areas.includes(ColumnArea.FixedLeft);\n const withFixedRight = areas.includes(ColumnArea.FixedRight);\n\n const itemsInColumn = (() => {\n const ITEMS_IN_COLUMN = 15;\n const COLUMNS_MAX = 4;\n\n const rem = Math.ceil(items.length / ITEMS_IN_COLUMN);\n const columnsCount = rem > COLUMNS_MAX ? COLUMNS_MAX : rem;\n\n const result = Math.ceil(items.length / columnsCount);\n\n return (result > ITEMS_IN_COLUMN ? result : ITEMS_IN_COLUMN) + (withFixedLeft || withFixedRight ? 1 : 0);\n })();\n\n while (sortedItems.length > 0) {\n const isFirstColumn = columns.length === 0;\n\n const hasFixedLeftArea = isFirstColumn && withFixedLeft;\n const hasFixedLeftItems = sortedItems[0]?.area === ColumnArea.FixedLeft;\n\n const newItemsInColumn = itemsInColumn - (hasFixedLeftArea ? 2 - +hasFixedLeftItems : 0);\n const columnItems = sortedItems.splice(0, newItemsInColumn);\n\n const hasFixedRightArea = sortedItems.length === 0 && withFixedRight;\n const hasFixedRightItems = columnItems.findIndex(item => item.area === ColumnArea.FixedRight) !== -1;\n\n const column: ColumnData = new Map();\n\n if (hasFixedLeftArea || hasFixedLeftItems) {\n column.set(ColumnArea.FixedLeft, []);\n }\n\n column.set(ColumnArea.Default, []);\n\n if (hasFixedRightArea || hasFixedRightItems) {\n column.set(ColumnArea.FixedRight, []);\n }\n\n for (const columnItem of columnItems) {\n const area = column.get(columnItem.area);\n if (!area) {\n continue;\n }\n\n itemsById.set(columnItem.id, columnItem);\n area.push(columnItem.id);\n }\n\n const defaultAreaIsEmpty = column.get(ColumnArea.Default)?.length === 0;\n\n if (defaultAreaIsEmpty) {\n column.delete(ColumnArea.Default);\n }\n\n columns.push(column);\n }\n\n const noDefaultColumnAdded = columns.findIndex(column => column.has(ColumnArea.Default)) === -1;\n if (noDefaultColumnAdded && columns.length) {\n const fixedRightIndex = columns.findIndex(column => column.has(ColumnArea.FixedRight));\n\n if (fixedRightIndex !== -1) {\n const columnAreas = columns[fixedRightIndex];\n const rightItems = columnAreas.get(ColumnArea.FixedRight);\n\n if (rightItems) {\n columnAreas.delete(ColumnArea.FixedRight);\n columnAreas.set(ColumnArea.Default, []);\n columnAreas.set(ColumnArea.FixedRight, rightItems);\n } else {\n columnAreas.set(ColumnArea.Default, []);\n }\n } else {\n columns[columns.length - 1].set(ColumnArea.Default, []);\n }\n }\n\n const size = ((): SizeTokenValue => {\n switch (columns.length) {\n case 1:\n return SizeTokenValue.Small;\n case 2:\n return SizeTokenValue.Medium;\n case 3:\n return SizeTokenValue.Large;\n }\n\n return SizeTokenValue.XLarge;\n })();\n\n return {columns, itemsById, size};\n};\n"],"names":["getColumnsData","items","areas","columns","itemsById","Map","areaFactor","ColumnArea","Default","FixedLeft","FixedRight","sortedItems","sort","a","b","aSort","length","area","bSort","withFixedLeft","includes","withFixedRight","itemsInColumn","rem","Math","ceil","ITEMS_IN_COLUMN","columnsCount","COLUMNS_MAX","result","hasFixedLeftArea","hasFixedLeftItems","newItemsInColumn","columnItems","splice","hasFixedRightArea","hasFixedRightItems","findIndex","item","column","set","columnItem","get","id","push","delete","has","fixedRightIndex","columnAreas","rightItems","size","SizeTokenValue","Small","Medium","Large","XLarge"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@join-x5/react-data-grid-settings",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.2.0",
|
|
4
4
|
"private": false,
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.cjs",
|
|
@@ -47,17 +47,17 @@
|
|
|
47
47
|
"@dnd-kit/sortable": "^10.0.0",
|
|
48
48
|
"@emotion/react": "^11.14.0",
|
|
49
49
|
"@emotion/styled": "^11.14.0",
|
|
50
|
-
"@join-x5/react": "1.
|
|
51
|
-
"@join-x5/react-icons": "1.
|
|
52
|
-
"@join-x5/react-theme": "1.
|
|
50
|
+
"@join-x5/react": "1.2.0",
|
|
51
|
+
"@join-x5/react-icons": "1.2.0",
|
|
52
|
+
"@join-x5/react-theme": "1.2.0"
|
|
53
53
|
},
|
|
54
54
|
"peerDependencies": {
|
|
55
55
|
"@dnd-kit/core": "^6.2.0",
|
|
56
56
|
"@emotion/react": "^11.14.0",
|
|
57
57
|
"@emotion/styled": "^11.14.0",
|
|
58
|
-
"@join-x5/react": "1.
|
|
59
|
-
"@join-x5/react-icons": "1.
|
|
60
|
-
"@join-x5/react-theme": "1.
|
|
58
|
+
"@join-x5/react": "1.2.0",
|
|
59
|
+
"@join-x5/react-icons": "1.2.0",
|
|
60
|
+
"@join-x5/react-theme": "1.2.0",
|
|
61
61
|
"react": ">=17.0.0",
|
|
62
62
|
"react-dom": ">=17.0.0"
|
|
63
63
|
}
|