@join-x5/react-data-grid-settings 1.4.0 → 1.4.2

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.
@@ -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","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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"}
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/utils.es.js CHANGED
@@ -1,7 +1,6 @@
1
1
  import { SizeTokenValue as u } from "@join-x5/react-theme";
2
2
  import { ColumnArea as e } from "./types.es.js";
3
- const p = (a, h) => {
4
- var I, F;
3
+ const S = (a, h) => {
5
4
  const n = [], f = /* @__PURE__ */ new Map(), g = {
6
5
  [e.Default]: 0,
7
6
  [e.FixedLeft]: -1,
@@ -9,18 +8,18 @@ const p = (a, h) => {
9
8
  }, d = [...a].sort((o, t) => {
10
9
  const s = o.sort + a.length * g[o.area], c = t.sort + a.length * g[t.area];
11
10
  return s - c;
12
- }), m = h.includes(e.FixedLeft), x = h.includes(e.FixedRight), C = (() => {
11
+ }), m = h.includes(e.FixedLeft), x = h.includes(e.FixedRight), F = (() => {
13
12
  const s = Math.ceil(a.length / 15), c = s > 4 ? 4 : s, r = Math.ceil(a.length / c);
14
13
  return (r > 15 ? r : 15) + (m || x ? 1 : 0);
15
14
  })();
16
15
  for (; d.length > 0; ) {
17
- const t = n.length === 0 && m, s = ((I = d[0]) == null ? void 0 : I.area) === e.FixedLeft, c = C - (t ? 2 - +s : 0), r = d.splice(0, c), R = d.length === 0 && x, A = r.findIndex((l) => l.area === e.FixedRight) !== -1, i = /* @__PURE__ */ new Map();
18
- (t || s) && i.set(e.FixedLeft, []), i.set(e.Default, []), (R || A) && i.set(e.FixedRight, []);
16
+ const t = n.length === 0 && m, s = d[0]?.area === e.FixedLeft, c = F - (t ? 2 - +s : 0), r = d.splice(0, c), C = d.length === 0 && x, L = r.findIndex((l) => l.area === e.FixedRight) !== -1, i = /* @__PURE__ */ new Map();
17
+ (t || s) && i.set(e.FixedLeft, []), i.set(e.Default, []), (C || L) && i.set(e.FixedRight, []);
19
18
  for (const l of r) {
20
- const M = i.get(l.area);
21
- M && (f.set(l.id, l), M.push(l.id));
19
+ const I = i.get(l.area);
20
+ I && (f.set(l.id, l), I.push(l.id));
22
21
  }
23
- ((F = i.get(e.Default)) == null ? void 0 : F.length) === 0 && i.delete(e.Default), n.push(i);
22
+ i.get(e.Default)?.length === 0 && i.delete(e.Default), n.push(i);
24
23
  }
25
24
  if (n.findIndex((o) => o.has(e.Default)) === -1 && n.length) {
26
25
  const o = n.findIndex((t) => t.has(e.FixedRight));
@@ -30,7 +29,7 @@ const p = (a, h) => {
30
29
  } else
31
30
  n[n.length - 1].set(e.Default, []);
32
31
  }
33
- const L = (() => {
32
+ const M = (() => {
34
33
  switch (n.length) {
35
34
  case 1:
36
35
  return u.Small;
@@ -44,10 +43,10 @@ const p = (a, h) => {
44
43
  return {
45
44
  columns: n,
46
45
  itemsById: f,
47
- size: L
46
+ size: M
48
47
  };
49
48
  };
50
49
  export {
51
- p as getColumnsData
50
+ S as getColumnsData
52
51
  };
53
52
  //# sourceMappingURL=utils.es.js.map
@@ -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","has","fixedRightIndex","columnAreas","rightItems","size","SizeTokenValue","Small","Medium","Large","XLarge"],"mappings":"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"}
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.4.0",
3
+ "version": "1.4.2",
4
4
  "private": false,
5
5
  "type": "module",
6
6
  "main": "dist/index.cjs",
@@ -38,27 +38,27 @@
38
38
  "rollup-plugin-preserve-directives": "^0.4.0",
39
39
  "typescript": "^5.7.3",
40
40
  "typescript-eslint": "^8.23.0",
41
- "vite": "^5.4.8",
42
- "vite-plugin-dts": "^4.2.4",
43
- "vite-tsconfig-paths": "^5.0.1"
41
+ "vite": "^7.1.5",
42
+ "vite-plugin-dts": "^4.5.4",
43
+ "vite-tsconfig-paths": "^5.1.4"
44
44
  },
45
45
  "dependencies": {
46
46
  "@dnd-kit/core": "^6.3.1",
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.4.0",
51
- "@join-x5/react-icons": "1.4.0",
52
- "@join-x5/react-theme": "1.4.0"
50
+ "@join-x5/react": "1.4.2",
51
+ "@join-x5/react-icons": "1.4.2",
52
+ "@join-x5/react-theme": "1.4.2"
53
53
  },
54
54
  "peerDependencies": {
55
55
  "@dnd-kit/core": "^6.3.1",
56
56
  "@dnd-kit/sortable": "^10.0.0",
57
57
  "@emotion/react": "^11.14.0",
58
58
  "@emotion/styled": "^11.14.0",
59
- "@join-x5/react": "1.4.0",
60
- "@join-x5/react-icons": "1.4.0",
61
- "@join-x5/react-theme": "1.4.0",
59
+ "@join-x5/react": "1.4.2",
60
+ "@join-x5/react-icons": "1.4.2",
61
+ "@join-x5/react-theme": "1.4.2",
62
62
  "react": ">=17.0.0",
63
63
  "react-dom": ">=17.0.0"
64
64
  }