@cloud-ru/ds-list 1.0.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/CHANGELOG.md +8 -0
- package/LICENSE +201 -0
- package/README.md +1413 -0
- package/dist/cjs/components/Items/AccordionItem/AccordionItem.d.ts +4 -0
- package/dist/cjs/components/Items/AccordionItem/AccordionItem.js +37 -0
- package/dist/cjs/components/Items/AccordionItem/index.d.ts +1 -0
- package/dist/cjs/components/Items/AccordionItem/index.js +17 -0
- package/dist/cjs/components/Items/BaseItem/BaseItem.d.ts +24 -0
- package/dist/cjs/components/Items/BaseItem/BaseItem.js +118 -0
- package/dist/cjs/components/Items/BaseItem/constants.d.ts +3 -0
- package/dist/cjs/components/Items/BaseItem/constants.js +8 -0
- package/dist/cjs/components/Items/BaseItem/index.d.ts +1 -0
- package/dist/cjs/components/Items/BaseItem/index.js +17 -0
- package/dist/cjs/components/Items/BaseItem/styles.module.css +312 -0
- package/dist/cjs/components/Items/GroupSelectItem/GroupSelectItem.d.ts +4 -0
- package/dist/cjs/components/Items/GroupSelectItem/GroupSelectItem.js +22 -0
- package/dist/cjs/components/Items/GroupSelectItem/index.d.ts +1 -0
- package/dist/cjs/components/Items/GroupSelectItem/index.js +17 -0
- package/dist/cjs/components/Items/NextListItem/NextListItem.d.ts +2 -0
- package/dist/cjs/components/Items/NextListItem/NextListItem.js +71 -0
- package/dist/cjs/components/Items/NextListItem/constants.d.ts +2 -0
- package/dist/cjs/components/Items/NextListItem/constants.js +13 -0
- package/dist/cjs/components/Items/NextListItem/index.d.ts +1 -0
- package/dist/cjs/components/Items/NextListItem/index.js +17 -0
- package/dist/cjs/components/Items/NextListItem/types.d.ts +4 -0
- package/dist/cjs/components/Items/NextListItem/types.js +2 -0
- package/dist/cjs/components/Items/PinGroupItem/PinGroupItem.d.ts +7 -0
- package/dist/cjs/components/Items/PinGroupItem/PinGroupItem.js +27 -0
- package/dist/cjs/components/Items/PinGroupItem/index.d.ts +1 -0
- package/dist/cjs/components/Items/PinGroupItem/index.js +17 -0
- package/dist/cjs/components/Items/PinGroupItem/styles.module.css +12 -0
- package/dist/cjs/components/Items/SearchItem/SearchItem.d.ts +17 -0
- package/dist/cjs/components/Items/SearchItem/SearchItem.js +28 -0
- package/dist/cjs/components/Items/SearchItem/index.d.ts +1 -0
- package/dist/cjs/components/Items/SearchItem/index.js +17 -0
- package/dist/cjs/components/Items/SearchItem/styles.module.css +13 -0
- package/dist/cjs/components/Items/SimpleItem/components/DragHandle/DragHandle.d.ts +7 -0
- package/dist/cjs/components/Items/SimpleItem/components/DragHandle/DragHandle.js +20 -0
- package/dist/cjs/components/Items/SimpleItem/components/DragHandle/index.d.ts +1 -0
- package/dist/cjs/components/Items/SimpleItem/components/DragHandle/index.js +17 -0
- package/dist/cjs/components/Items/SimpleItem/components/OverlayDragHandle/OverlayDragHandle.d.ts +2 -0
- package/dist/cjs/components/Items/SimpleItem/components/OverlayDragHandle/OverlayDragHandle.js +9 -0
- package/dist/cjs/components/Items/SimpleItem/components/OverlayDragHandle/index.d.ts +1 -0
- package/dist/cjs/components/Items/SimpleItem/components/OverlayDragHandle/index.js +17 -0
- package/dist/cjs/components/Items/SimpleItem/components/SimpleGroupBlock/SimpleGroupBlock.d.ts +19 -0
- package/dist/cjs/components/Items/SimpleItem/components/SimpleGroupBlock/SimpleGroupBlock.js +52 -0
- package/dist/cjs/components/Items/SimpleItem/components/SimpleGroupBlock/index.d.ts +1 -0
- package/dist/cjs/components/Items/SimpleItem/components/SimpleGroupBlock/index.js +17 -0
- package/dist/cjs/components/Items/SimpleItem/components/SimpleGroupBlockOverlay/SimpleGroupBlockOverlay.d.ts +15 -0
- package/dist/cjs/components/Items/SimpleItem/components/SimpleGroupBlockOverlay/SimpleGroupBlockOverlay.js +19 -0
- package/dist/cjs/components/Items/SimpleItem/components/SimpleGroupBlockOverlay/index.d.ts +1 -0
- package/dist/cjs/components/Items/SimpleItem/components/SimpleGroupBlockOverlay/index.js +17 -0
- package/dist/cjs/components/Items/SimpleItem/components/SimpleItem/SimpleItem.d.ts +11 -0
- package/dist/cjs/components/Items/SimpleItem/components/SimpleItem/SimpleItem.js +48 -0
- package/dist/cjs/components/Items/SimpleItem/components/SimpleItem/index.d.ts +1 -0
- package/dist/cjs/components/Items/SimpleItem/components/SimpleItem/index.js +17 -0
- package/dist/cjs/components/Items/SimpleItem/components/SimpleItemOverlay/SimpleItemOverlay.d.ts +15 -0
- package/dist/cjs/components/Items/SimpleItem/components/SimpleItemOverlay/SimpleItemOverlay.js +19 -0
- package/dist/cjs/components/Items/SimpleItem/components/SimpleItemOverlay/index.d.ts +1 -0
- package/dist/cjs/components/Items/SimpleItem/components/SimpleItemOverlay/index.js +17 -0
- package/dist/cjs/components/Items/SimpleItem/components/index.d.ts +4 -0
- package/dist/cjs/components/Items/SimpleItem/components/index.js +20 -0
- package/dist/cjs/components/Items/SimpleItem/constants.d.ts +7 -0
- package/dist/cjs/components/Items/SimpleItem/constants.js +9 -0
- package/dist/cjs/components/Items/SimpleItem/index.d.ts +2 -0
- package/dist/cjs/components/Items/SimpleItem/index.js +18 -0
- package/dist/cjs/components/Items/SimpleItem/styles.module.css +96 -0
- package/dist/cjs/components/Items/SimpleItem/types.d.ts +3 -0
- package/dist/cjs/components/Items/SimpleItem/types.js +2 -0
- package/dist/cjs/components/Items/SimpleItem/utils.d.ts +6 -0
- package/dist/cjs/components/Items/SimpleItem/utils.js +11 -0
- package/dist/cjs/components/Items/hooks.d.ts +23 -0
- package/dist/cjs/components/Items/hooks.js +130 -0
- package/dist/cjs/components/Items/index.d.ts +5 -0
- package/dist/cjs/components/Items/index.js +21 -0
- package/dist/cjs/components/Items/styles.module.css +168 -0
- package/dist/cjs/components/Items/types.d.ts +168 -0
- package/dist/cjs/components/Items/types.js +2 -0
- package/dist/cjs/components/Items/utils.d.ts +52 -0
- package/dist/cjs/components/Items/utils.js +218 -0
- package/dist/cjs/components/Lists/Droplist/DropList.d.ts +21 -0
- package/dist/cjs/components/Lists/Droplist/DropList.js +36 -0
- package/dist/cjs/components/Lists/Droplist/constants.d.ts +8 -0
- package/dist/cjs/components/Lists/Droplist/constants.js +10 -0
- package/dist/cjs/components/Lists/Droplist/index.d.ts +1 -0
- package/dist/cjs/components/Lists/Droplist/index.js +17 -0
- package/dist/cjs/components/Lists/List/List.d.ts +61 -0
- package/dist/cjs/components/Lists/List/List.js +62 -0
- package/dist/cjs/components/Lists/List/index.d.ts +1 -0
- package/dist/cjs/components/Lists/List/index.js +17 -0
- package/dist/cjs/components/Lists/ListPrivate/ListPrivate.d.ts +18 -0
- package/dist/cjs/components/Lists/ListPrivate/ListPrivate.js +301 -0
- package/dist/cjs/components/Lists/ListPrivate/constants.d.ts +7 -0
- package/dist/cjs/components/Lists/ListPrivate/constants.js +19 -0
- package/dist/cjs/components/Lists/ListPrivate/index.d.ts +1 -0
- package/dist/cjs/components/Lists/ListPrivate/index.js +17 -0
- package/dist/cjs/components/Lists/ListPrivate/styles.module.css +80 -0
- package/dist/cjs/components/Lists/contexts/CollapseProvider.d.ts +17 -0
- package/dist/cjs/components/Lists/contexts/CollapseProvider.js +10 -0
- package/dist/cjs/components/Lists/contexts/FocusListProvider.d.ts +9 -0
- package/dist/cjs/components/Lists/contexts/FocusListProvider.js +9 -0
- package/dist/cjs/components/Lists/contexts/NewListProvider.d.ts +33 -0
- package/dist/cjs/components/Lists/contexts/NewListProvider.js +23 -0
- package/dist/cjs/components/Lists/contexts/OpenListProvider.d.ts +6 -0
- package/dist/cjs/components/Lists/contexts/OpenListProvider.js +10 -0
- package/dist/cjs/components/Lists/contexts/SelectionProvider.d.ts +74 -0
- package/dist/cjs/components/Lists/contexts/SelectionProvider.js +90 -0
- package/dist/cjs/components/Lists/contexts/index.d.ts +5 -0
- package/dist/cjs/components/Lists/contexts/index.js +21 -0
- package/dist/cjs/components/Lists/hooks.d.ts +83 -0
- package/dist/cjs/components/Lists/hooks.js +242 -0
- package/dist/cjs/components/Lists/index.d.ts +5 -0
- package/dist/cjs/components/Lists/index.js +21 -0
- package/dist/cjs/components/Lists/styles.module.css +65 -0
- package/dist/cjs/components/Lists/types.d.ts +200 -0
- package/dist/cjs/components/Lists/types.js +2 -0
- package/dist/cjs/components/Lists/utils.d.ts +8 -0
- package/dist/cjs/components/Lists/utils.js +31 -0
- package/dist/cjs/components/index.d.ts +2 -0
- package/dist/cjs/components/index.js +18 -0
- package/dist/cjs/constants.d.ts +48 -0
- package/dist/cjs/constants.js +51 -0
- package/dist/cjs/helperComponents/CollapseBlockPrivate/CollapseBlockPrivate.d.ts +9 -0
- package/dist/cjs/helperComponents/CollapseBlockPrivate/CollapseBlockPrivate.js +15 -0
- package/dist/cjs/helperComponents/CollapseBlockPrivate/index.d.ts +1 -0
- package/dist/cjs/helperComponents/CollapseBlockPrivate/index.js +17 -0
- package/dist/cjs/helperComponents/CollapseBlockPrivate/styles.module.css +27 -0
- package/dist/cjs/helperComponents/DesktopDroplist/DesktopDroplist.d.ts +7 -0
- package/dist/cjs/helperComponents/DesktopDroplist/DesktopDroplist.js +142 -0
- package/dist/cjs/helperComponents/DesktopDroplist/index.d.ts +1 -0
- package/dist/cjs/helperComponents/DesktopDroplist/index.js +17 -0
- package/dist/cjs/helperComponents/HiddenTabButton/HiddenTabButton.d.ts +7 -0
- package/dist/cjs/helperComponents/HiddenTabButton/HiddenTabButton.js +20 -0
- package/dist/cjs/helperComponents/HiddenTabButton/index.d.ts +1 -0
- package/dist/cjs/helperComponents/HiddenTabButton/index.js +17 -0
- package/dist/cjs/helperComponents/HiddenTabButton/styles.module.css +9 -0
- package/dist/cjs/helperComponents/ItemContent/ItemContent.d.ts +17 -0
- package/dist/cjs/helperComponents/ItemContent/ItemContent.js +27 -0
- package/dist/cjs/helperComponents/ItemContent/index.d.ts +1 -0
- package/dist/cjs/helperComponents/ItemContent/index.js +17 -0
- package/dist/cjs/helperComponents/ItemContent/styles.module.css +139 -0
- package/dist/cjs/helperComponents/ListEmptyState/ListEmptyState.d.ts +16 -0
- package/dist/cjs/helperComponents/ListEmptyState/ListEmptyState.js +25 -0
- package/dist/cjs/helperComponents/ListEmptyState/hooks.d.ts +10 -0
- package/dist/cjs/helperComponents/ListEmptyState/hooks.js +30 -0
- package/dist/cjs/helperComponents/ListEmptyState/index.d.ts +2 -0
- package/dist/cjs/helperComponents/ListEmptyState/index.js +20 -0
- package/dist/cjs/helperComponents/ListEmptyState/styles.module.css +8 -0
- package/dist/cjs/helperComponents/MobileDroplist/MobileDroplist.d.ts +9 -0
- package/dist/cjs/helperComponents/MobileDroplist/MobileDroplist.js +143 -0
- package/dist/cjs/helperComponents/MobileDroplist/MobileDroplist.module.css +16 -0
- package/dist/cjs/helperComponents/MobileDroplist/index.d.ts +1 -0
- package/dist/cjs/helperComponents/MobileDroplist/index.js +17 -0
- package/dist/cjs/helperComponents/MobileDroplist/utils.d.ts +11 -0
- package/dist/cjs/helperComponents/MobileDroplist/utils.js +65 -0
- package/dist/cjs/helperComponents/Separator/Separator.d.ts +20 -0
- package/dist/cjs/helperComponents/Separator/Separator.js +40 -0
- package/dist/cjs/helperComponents/Separator/constants.d.ts +3 -0
- package/dist/cjs/helperComponents/Separator/constants.js +10 -0
- package/dist/cjs/helperComponents/Separator/index.d.ts +1 -0
- package/dist/cjs/helperComponents/Separator/index.js +17 -0
- package/dist/cjs/helperComponents/Separator/styles.module.css +168 -0
- package/dist/cjs/helperComponents/index.d.ts +5 -0
- package/dist/cjs/helperComponents/index.js +21 -0
- package/dist/cjs/index.d.ts +9 -0
- package/dist/cjs/index.js +37 -0
- package/dist/cjs/locale/index.d.ts +79 -0
- package/dist/cjs/locale/index.js +44 -0
- package/dist/cjs/package.json +3 -0
- package/dist/cjs/style.css +1113 -0
- package/dist/cjs/types.d.ts +38 -0
- package/dist/cjs/types.js +2 -0
- package/dist/cjs/utils.d.ts +18 -0
- package/dist/cjs/utils.js +26 -0
- package/dist/esm/components/Items/AccordionItem/AccordionItem.d.ts +4 -0
- package/dist/esm/components/Items/AccordionItem/AccordionItem.js +34 -0
- package/dist/esm/components/Items/AccordionItem/index.d.ts +1 -0
- package/dist/esm/components/Items/AccordionItem/index.js +1 -0
- package/dist/esm/components/Items/BaseItem/BaseItem.d.ts +24 -0
- package/dist/esm/components/Items/BaseItem/BaseItem.js +112 -0
- package/dist/esm/components/Items/BaseItem/constants.d.ts +3 -0
- package/dist/esm/components/Items/BaseItem/constants.js +5 -0
- package/dist/esm/components/Items/BaseItem/index.d.ts +1 -0
- package/dist/esm/components/Items/BaseItem/index.js +1 -0
- package/dist/esm/components/Items/BaseItem/styles.module.css +312 -0
- package/dist/esm/components/Items/GroupSelectItem/GroupSelectItem.d.ts +4 -0
- package/dist/esm/components/Items/GroupSelectItem/GroupSelectItem.js +19 -0
- package/dist/esm/components/Items/GroupSelectItem/index.d.ts +1 -0
- package/dist/esm/components/Items/GroupSelectItem/index.js +1 -0
- package/dist/esm/components/Items/NextListItem/NextListItem.d.ts +2 -0
- package/dist/esm/components/Items/NextListItem/NextListItem.js +68 -0
- package/dist/esm/components/Items/NextListItem/constants.d.ts +2 -0
- package/dist/esm/components/Items/NextListItem/constants.js +10 -0
- package/dist/esm/components/Items/NextListItem/index.d.ts +1 -0
- package/dist/esm/components/Items/NextListItem/index.js +1 -0
- package/dist/esm/components/Items/NextListItem/types.d.ts +4 -0
- package/dist/esm/components/Items/NextListItem/types.js +1 -0
- package/dist/esm/components/Items/PinGroupItem/PinGroupItem.d.ts +7 -0
- package/dist/esm/components/Items/PinGroupItem/PinGroupItem.js +20 -0
- package/dist/esm/components/Items/PinGroupItem/index.d.ts +1 -0
- package/dist/esm/components/Items/PinGroupItem/index.js +1 -0
- package/dist/esm/components/Items/PinGroupItem/styles.module.css +12 -0
- package/dist/esm/components/Items/SearchItem/SearchItem.d.ts +17 -0
- package/dist/esm/components/Items/SearchItem/SearchItem.js +22 -0
- package/dist/esm/components/Items/SearchItem/index.d.ts +1 -0
- package/dist/esm/components/Items/SearchItem/index.js +1 -0
- package/dist/esm/components/Items/SearchItem/styles.module.css +13 -0
- package/dist/esm/components/Items/SimpleItem/components/DragHandle/DragHandle.d.ts +7 -0
- package/dist/esm/components/Items/SimpleItem/components/DragHandle/DragHandle.js +14 -0
- package/dist/esm/components/Items/SimpleItem/components/DragHandle/index.d.ts +1 -0
- package/dist/esm/components/Items/SimpleItem/components/DragHandle/index.js +1 -0
- package/dist/esm/components/Items/SimpleItem/components/OverlayDragHandle/OverlayDragHandle.d.ts +2 -0
- package/dist/esm/components/Items/SimpleItem/components/OverlayDragHandle/OverlayDragHandle.js +6 -0
- package/dist/esm/components/Items/SimpleItem/components/OverlayDragHandle/index.d.ts +1 -0
- package/dist/esm/components/Items/SimpleItem/components/OverlayDragHandle/index.js +1 -0
- package/dist/esm/components/Items/SimpleItem/components/SimpleGroupBlock/SimpleGroupBlock.d.ts +19 -0
- package/dist/esm/components/Items/SimpleItem/components/SimpleGroupBlock/SimpleGroupBlock.js +46 -0
- package/dist/esm/components/Items/SimpleItem/components/SimpleGroupBlock/index.d.ts +1 -0
- package/dist/esm/components/Items/SimpleItem/components/SimpleGroupBlock/index.js +1 -0
- package/dist/esm/components/Items/SimpleItem/components/SimpleGroupBlockOverlay/SimpleGroupBlockOverlay.d.ts +15 -0
- package/dist/esm/components/Items/SimpleItem/components/SimpleGroupBlockOverlay/SimpleGroupBlockOverlay.js +13 -0
- package/dist/esm/components/Items/SimpleItem/components/SimpleGroupBlockOverlay/index.d.ts +1 -0
- package/dist/esm/components/Items/SimpleItem/components/SimpleGroupBlockOverlay/index.js +1 -0
- package/dist/esm/components/Items/SimpleItem/components/SimpleItem/SimpleItem.d.ts +11 -0
- package/dist/esm/components/Items/SimpleItem/components/SimpleItem/SimpleItem.js +42 -0
- package/dist/esm/components/Items/SimpleItem/components/SimpleItem/index.d.ts +1 -0
- package/dist/esm/components/Items/SimpleItem/components/SimpleItem/index.js +1 -0
- package/dist/esm/components/Items/SimpleItem/components/SimpleItemOverlay/SimpleItemOverlay.d.ts +15 -0
- package/dist/esm/components/Items/SimpleItem/components/SimpleItemOverlay/SimpleItemOverlay.js +13 -0
- package/dist/esm/components/Items/SimpleItem/components/SimpleItemOverlay/index.d.ts +1 -0
- package/dist/esm/components/Items/SimpleItem/components/SimpleItemOverlay/index.js +1 -0
- package/dist/esm/components/Items/SimpleItem/components/index.d.ts +4 -0
- package/dist/esm/components/Items/SimpleItem/components/index.js +4 -0
- package/dist/esm/components/Items/SimpleItem/constants.d.ts +7 -0
- package/dist/esm/components/Items/SimpleItem/constants.js +6 -0
- package/dist/esm/components/Items/SimpleItem/index.d.ts +2 -0
- package/dist/esm/components/Items/SimpleItem/index.js +2 -0
- package/dist/esm/components/Items/SimpleItem/styles.module.css +96 -0
- package/dist/esm/components/Items/SimpleItem/types.d.ts +3 -0
- package/dist/esm/components/Items/SimpleItem/types.js +1 -0
- package/dist/esm/components/Items/SimpleItem/utils.d.ts +6 -0
- package/dist/esm/components/Items/SimpleItem/utils.js +8 -0
- package/dist/esm/components/Items/hooks.d.ts +23 -0
- package/dist/esm/components/Items/hooks.js +125 -0
- package/dist/esm/components/Items/index.d.ts +5 -0
- package/dist/esm/components/Items/index.js +5 -0
- package/dist/esm/components/Items/styles.module.css +168 -0
- package/dist/esm/components/Items/types.d.ts +168 -0
- package/dist/esm/components/Items/types.js +1 -0
- package/dist/esm/components/Items/utils.d.ts +52 -0
- package/dist/esm/components/Items/utils.js +203 -0
- package/dist/esm/components/Lists/Droplist/DropList.d.ts +21 -0
- package/dist/esm/components/Lists/Droplist/DropList.js +32 -0
- package/dist/esm/components/Lists/Droplist/constants.d.ts +8 -0
- package/dist/esm/components/Lists/Droplist/constants.js +7 -0
- package/dist/esm/components/Lists/Droplist/index.d.ts +1 -0
- package/dist/esm/components/Lists/Droplist/index.js +1 -0
- package/dist/esm/components/Lists/List/List.d.ts +61 -0
- package/dist/esm/components/Lists/List/List.js +56 -0
- package/dist/esm/components/Lists/List/index.d.ts +1 -0
- package/dist/esm/components/Lists/List/index.js +1 -0
- package/dist/esm/components/Lists/ListPrivate/ListPrivate.d.ts +18 -0
- package/dist/esm/components/Lists/ListPrivate/ListPrivate.js +295 -0
- package/dist/esm/components/Lists/ListPrivate/constants.d.ts +7 -0
- package/dist/esm/components/Lists/ListPrivate/constants.js +16 -0
- package/dist/esm/components/Lists/ListPrivate/index.d.ts +1 -0
- package/dist/esm/components/Lists/ListPrivate/index.js +1 -0
- package/dist/esm/components/Lists/ListPrivate/styles.module.css +80 -0
- package/dist/esm/components/Lists/contexts/CollapseProvider.d.ts +17 -0
- package/dist/esm/components/Lists/contexts/CollapseProvider.js +5 -0
- package/dist/esm/components/Lists/contexts/FocusListProvider.d.ts +9 -0
- package/dist/esm/components/Lists/contexts/FocusListProvider.js +5 -0
- package/dist/esm/components/Lists/contexts/NewListProvider.d.ts +33 -0
- package/dist/esm/components/Lists/contexts/NewListProvider.js +18 -0
- package/dist/esm/components/Lists/contexts/OpenListProvider.d.ts +6 -0
- package/dist/esm/components/Lists/contexts/OpenListProvider.js +6 -0
- package/dist/esm/components/Lists/contexts/SelectionProvider.d.ts +74 -0
- package/dist/esm/components/Lists/contexts/SelectionProvider.js +83 -0
- package/dist/esm/components/Lists/contexts/index.d.ts +5 -0
- package/dist/esm/components/Lists/contexts/index.js +5 -0
- package/dist/esm/components/Lists/hooks.d.ts +83 -0
- package/dist/esm/components/Lists/hooks.js +238 -0
- package/dist/esm/components/Lists/index.d.ts +5 -0
- package/dist/esm/components/Lists/index.js +5 -0
- package/dist/esm/components/Lists/styles.module.css +65 -0
- package/dist/esm/components/Lists/types.d.ts +200 -0
- package/dist/esm/components/Lists/types.js +1 -0
- package/dist/esm/components/Lists/utils.d.ts +8 -0
- package/dist/esm/components/Lists/utils.js +28 -0
- package/dist/esm/components/index.d.ts +2 -0
- package/dist/esm/components/index.js +2 -0
- package/dist/esm/constants.d.ts +48 -0
- package/dist/esm/constants.js +48 -0
- package/dist/esm/helperComponents/CollapseBlockPrivate/CollapseBlockPrivate.d.ts +9 -0
- package/dist/esm/helperComponents/CollapseBlockPrivate/CollapseBlockPrivate.js +9 -0
- package/dist/esm/helperComponents/CollapseBlockPrivate/index.d.ts +1 -0
- package/dist/esm/helperComponents/CollapseBlockPrivate/index.js +1 -0
- package/dist/esm/helperComponents/CollapseBlockPrivate/styles.module.css +27 -0
- package/dist/esm/helperComponents/DesktopDroplist/DesktopDroplist.d.ts +7 -0
- package/dist/esm/helperComponents/DesktopDroplist/DesktopDroplist.js +136 -0
- package/dist/esm/helperComponents/DesktopDroplist/index.d.ts +1 -0
- package/dist/esm/helperComponents/DesktopDroplist/index.js +1 -0
- package/dist/esm/helperComponents/HiddenTabButton/HiddenTabButton.d.ts +7 -0
- package/dist/esm/helperComponents/HiddenTabButton/HiddenTabButton.js +14 -0
- package/dist/esm/helperComponents/HiddenTabButton/index.d.ts +1 -0
- package/dist/esm/helperComponents/HiddenTabButton/index.js +1 -0
- package/dist/esm/helperComponents/HiddenTabButton/styles.module.css +9 -0
- package/dist/esm/helperComponents/ItemContent/ItemContent.d.ts +17 -0
- package/dist/esm/helperComponents/ItemContent/ItemContent.js +21 -0
- package/dist/esm/helperComponents/ItemContent/index.d.ts +1 -0
- package/dist/esm/helperComponents/ItemContent/index.js +1 -0
- package/dist/esm/helperComponents/ItemContent/styles.module.css +139 -0
- package/dist/esm/helperComponents/ListEmptyState/ListEmptyState.d.ts +16 -0
- package/dist/esm/helperComponents/ListEmptyState/ListEmptyState.js +19 -0
- package/dist/esm/helperComponents/ListEmptyState/hooks.d.ts +10 -0
- package/dist/esm/helperComponents/ListEmptyState/hooks.js +27 -0
- package/dist/esm/helperComponents/ListEmptyState/index.d.ts +2 -0
- package/dist/esm/helperComponents/ListEmptyState/index.js +2 -0
- package/dist/esm/helperComponents/ListEmptyState/styles.module.css +8 -0
- package/dist/esm/helperComponents/MobileDroplist/MobileDroplist.d.ts +9 -0
- package/dist/esm/helperComponents/MobileDroplist/MobileDroplist.js +137 -0
- package/dist/esm/helperComponents/MobileDroplist/MobileDroplist.module.css +16 -0
- package/dist/esm/helperComponents/MobileDroplist/index.d.ts +1 -0
- package/dist/esm/helperComponents/MobileDroplist/index.js +1 -0
- package/dist/esm/helperComponents/MobileDroplist/utils.d.ts +11 -0
- package/dist/esm/helperComponents/MobileDroplist/utils.js +61 -0
- package/dist/esm/helperComponents/Separator/Separator.d.ts +20 -0
- package/dist/esm/helperComponents/Separator/Separator.js +34 -0
- package/dist/esm/helperComponents/Separator/constants.d.ts +3 -0
- package/dist/esm/helperComponents/Separator/constants.js +7 -0
- package/dist/esm/helperComponents/Separator/index.d.ts +1 -0
- package/dist/esm/helperComponents/Separator/index.js +1 -0
- package/dist/esm/helperComponents/Separator/styles.module.css +168 -0
- package/dist/esm/helperComponents/index.d.ts +5 -0
- package/dist/esm/helperComponents/index.js +5 -0
- package/dist/esm/index.d.ts +9 -0
- package/dist/esm/index.js +14 -0
- package/dist/esm/locale/index.d.ts +79 -0
- package/dist/esm/locale/index.js +41 -0
- package/dist/esm/style.css +1113 -0
- package/dist/esm/types.d.ts +38 -0
- package/dist/esm/types.js +1 -0
- package/dist/esm/utils.d.ts +18 -0
- package/dist/esm/utils.js +19 -0
- package/dist/tsconfig.cjs.tsbuildinfo +1 -0
- package/dist/tsconfig.esm.tsbuildinfo +1 -0
- package/package.json +70 -0
- package/src/_iconSizes.scss +7 -0
- package/src/components/Items/AccordionItem/AccordionItem.tsx +79 -0
- package/src/components/Items/AccordionItem/index.ts +1 -0
- package/src/components/Items/BaseItem/BaseItem.tsx +274 -0
- package/src/components/Items/BaseItem/constants.ts +9 -0
- package/src/components/Items/BaseItem/index.ts +1 -0
- package/src/components/Items/BaseItem/styles.module.scss +330 -0
- package/src/components/Items/GroupSelectItem/GroupSelectItem.tsx +48 -0
- package/src/components/Items/GroupSelectItem/index.ts +1 -0
- package/src/components/Items/NextListItem/NextListItem.tsx +157 -0
- package/src/components/Items/NextListItem/constants.ts +12 -0
- package/src/components/Items/NextListItem/index.ts +1 -0
- package/src/components/Items/NextListItem/types.ts +3 -0
- package/src/components/Items/PinGroupItem/PinGroupItem.tsx +38 -0
- package/src/components/Items/PinGroupItem/index.ts +1 -0
- package/src/components/Items/PinGroupItem/styles.module.scss +14 -0
- package/src/components/Items/SearchItem/SearchItem.tsx +55 -0
- package/src/components/Items/SearchItem/index.ts +1 -0
- package/src/components/Items/SearchItem/styles.module.scss +26 -0
- package/src/components/Items/SimpleItem/components/DragHandle/DragHandle.tsx +27 -0
- package/src/components/Items/SimpleItem/components/DragHandle/index.ts +1 -0
- package/src/components/Items/SimpleItem/components/OverlayDragHandle/OverlayDragHandle.tsx +6 -0
- package/src/components/Items/SimpleItem/components/OverlayDragHandle/index.ts +1 -0
- package/src/components/Items/SimpleItem/components/SimpleGroupBlock/SimpleGroupBlock.tsx +87 -0
- package/src/components/Items/SimpleItem/components/SimpleGroupBlock/index.ts +1 -0
- package/src/components/Items/SimpleItem/components/SimpleGroupBlockOverlay/SimpleGroupBlockOverlay.tsx +33 -0
- package/src/components/Items/SimpleItem/components/SimpleGroupBlockOverlay/index.ts +1 -0
- package/src/components/Items/SimpleItem/components/SimpleItem/SimpleItem.tsx +70 -0
- package/src/components/Items/SimpleItem/components/SimpleItem/index.ts +1 -0
- package/src/components/Items/SimpleItem/components/SimpleItemOverlay/SimpleItemOverlay.tsx +26 -0
- package/src/components/Items/SimpleItem/components/SimpleItemOverlay/index.ts +1 -0
- package/src/components/Items/SimpleItem/components/index.ts +4 -0
- package/src/components/Items/SimpleItem/constants.ts +8 -0
- package/src/components/Items/SimpleItem/index.ts +2 -0
- package/src/components/Items/SimpleItem/styles.module.scss +149 -0
- package/src/components/Items/SimpleItem/types.ts +7 -0
- package/src/components/Items/SimpleItem/utils.ts +8 -0
- package/src/components/Items/hooks.tsx +233 -0
- package/src/components/Items/index.ts +5 -0
- package/src/components/Items/styles.module.scss +107 -0
- package/src/components/Items/types.ts +203 -0
- package/src/components/Items/utils.ts +302 -0
- package/src/components/Lists/Droplist/DropList.tsx +62 -0
- package/src/components/Lists/Droplist/constants.ts +11 -0
- package/src/components/Lists/Droplist/index.ts +1 -0
- package/src/components/Lists/List/List.tsx +155 -0
- package/src/components/Lists/List/index.ts +1 -0
- package/src/components/Lists/ListPrivate/ListPrivate.tsx +560 -0
- package/src/components/Lists/ListPrivate/constants.ts +22 -0
- package/src/components/Lists/ListPrivate/index.ts +1 -0
- package/src/components/Lists/ListPrivate/styles.module.scss +90 -0
- package/src/components/Lists/contexts/CollapseProvider.tsx +22 -0
- package/src/components/Lists/contexts/FocusListProvider.tsx +15 -0
- package/src/components/Lists/contexts/NewListProvider.tsx +76 -0
- package/src/components/Lists/contexts/OpenListProvider.tsx +13 -0
- package/src/components/Lists/contexts/SelectionProvider.tsx +214 -0
- package/src/components/Lists/contexts/index.ts +5 -0
- package/src/components/Lists/hooks.ts +351 -0
- package/src/components/Lists/index.ts +5 -0
- package/src/components/Lists/styles.module.scss +95 -0
- package/src/components/Lists/types.ts +231 -0
- package/src/components/Lists/utils.ts +32 -0
- package/src/components/index.ts +2 -0
- package/src/constants.ts +53 -0
- package/src/helperComponents/CollapseBlockPrivate/CollapseBlockPrivate.tsx +32 -0
- package/src/helperComponents/CollapseBlockPrivate/index.ts +1 -0
- package/src/helperComponents/CollapseBlockPrivate/styles.module.scss +32 -0
- package/src/helperComponents/DesktopDroplist/DesktopDroplist.tsx +313 -0
- package/src/helperComponents/DesktopDroplist/index.ts +1 -0
- package/src/helperComponents/HiddenTabButton/HiddenTabButton.tsx +35 -0
- package/src/helperComponents/HiddenTabButton/index.ts +1 -0
- package/src/helperComponents/HiddenTabButton/styles.module.scss +11 -0
- package/src/helperComponents/ItemContent/ItemContent.tsx +80 -0
- package/src/helperComponents/ItemContent/index.ts +1 -0
- package/src/helperComponents/ItemContent/styles.module.scss +100 -0
- package/src/helperComponents/ListEmptyState/ListEmptyState.tsx +52 -0
- package/src/helperComponents/ListEmptyState/hooks.ts +42 -0
- package/src/helperComponents/ListEmptyState/index.ts +2 -0
- package/src/helperComponents/ListEmptyState/styles.module.scss +11 -0
- package/src/helperComponents/MobileDroplist/MobileDroplist.module.scss +25 -0
- package/src/helperComponents/MobileDroplist/MobileDroplist.tsx +230 -0
- package/src/helperComponents/MobileDroplist/index.ts +1 -0
- package/src/helperComponents/MobileDroplist/utils.tsx +76 -0
- package/src/helperComponents/Separator/Separator.tsx +115 -0
- package/src/helperComponents/Separator/constants.ts +11 -0
- package/src/helperComponents/Separator/index.ts +1 -0
- package/src/helperComponents/Separator/styles.module.scss +255 -0
- package/src/helperComponents/index.ts +5 -0
- package/src/index.ts +19 -0
- package/src/locale/index.ts +45 -0
- package/src/types.ts +44 -0
- package/src/utils.ts +26 -0
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
@use '@cloud-ru/ds-figma-variables/build/scss/styles/styles.module' as base;
|
|
2
|
+
@use '@cloud-ru/ds-figma-variables/build/scss/components/field.module' as field;
|
|
3
|
+
|
|
4
|
+
// Поиск в списке/дроплисте — это field размера `s` (в Figma list-матрице search
|
|
5
|
+
// во всех колонках s/m/l зафиксирован на fieldContainer.size.s). SearchPrivate даёт
|
|
6
|
+
// только inputLine (gap/padding контента); сам field-бокс (min-height + padding) задаёт
|
|
7
|
+
// потребитель — здесь, по аналогии с `.fieldContainer` в @cloud-ru/ds-search.
|
|
8
|
+
.searchItem {
|
|
9
|
+
display: flex;
|
|
10
|
+
align-items: center;
|
|
11
|
+
|
|
12
|
+
box-sizing: border-box;
|
|
13
|
+
width: 100%;
|
|
14
|
+
min-height: base.simple-var(field.$field, 'anatomy', 'size', 's', 'fieldContainer', 'min-height');
|
|
15
|
+
padding: base.simple-var(field.$field, 'anatomy', 'size', 's', 'fieldContainer', 'padding-top')
|
|
16
|
+
base.simple-var(field.$field, 'anatomy', 'size', 's', 'fieldContainer', 'padding-right')
|
|
17
|
+
base.simple-var(field.$field, 'anatomy', 'size', 's', 'fieldContainer', 'padding-bottom')
|
|
18
|
+
base.simple-var(field.$field, 'anatomy', 'size', 's', 'fieldContainer', 'padding-left');
|
|
19
|
+
|
|
20
|
+
&:focus-within,
|
|
21
|
+
&:focus-visible {
|
|
22
|
+
max-width: 100%;
|
|
23
|
+
outline: base.$sn-theme-color-available-complementary solid base.$sn-primitive-strokeWeight-strokeSemiBold;
|
|
24
|
+
outline-offset: calc(0px - base.$sn-primitive-strokeWeight-strokeSemiBold);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { DragDropSVG } from '@cloud-ru/ds-icons/interface/system';
|
|
2
|
+
import { ButtonHTMLAttributes } from 'react';
|
|
3
|
+
|
|
4
|
+
import { TEST_IDS } from '../../../../../constants';
|
|
5
|
+
import { listLocale } from '../../../../../locale';
|
|
6
|
+
import styles from '../../styles.module.scss';
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Ручка drag&drop строки/заголовка reorder-режима: кнопка с иконкой, `aria-label` и `data-test-id`.
|
|
10
|
+
* Живой вариант получает sortable-пропы `@dnd-kit` (`attributes`/`listeners`, `onMouseDown`/`onClick`,
|
|
11
|
+
* `NO_DRAG_ATTRIBUTE`) через `...rest`; статичная копия для `DragOverlay` — `OverlayDragHandle`.
|
|
12
|
+
*/
|
|
13
|
+
export function DragHandle(props: ButtonHTMLAttributes<HTMLButtonElement>) {
|
|
14
|
+
const { t } = listLocale.useTranslations();
|
|
15
|
+
|
|
16
|
+
return (
|
|
17
|
+
<button
|
|
18
|
+
type='button'
|
|
19
|
+
aria-label={t('list.dragHandle')}
|
|
20
|
+
data-test-id={TEST_IDS.dragHandle}
|
|
21
|
+
className={styles.dragHandle}
|
|
22
|
+
{...props}
|
|
23
|
+
>
|
|
24
|
+
<DragDropSVG />
|
|
25
|
+
</button>
|
|
26
|
+
);
|
|
27
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './DragHandle';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './OverlayDragHandle';
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import { useDndContext } from '@dnd-kit/core';
|
|
2
|
+
import { SortableContext, useSortable, verticalListSortingStrategy } from '@dnd-kit/sortable';
|
|
3
|
+
import { CSS } from '@dnd-kit/utilities';
|
|
4
|
+
import { NO_DRAG_ATTRIBUTE } from '@cloud-ru/ds-bottom-sheet';
|
|
5
|
+
import { CSSProperties, MouseEvent, ReactNode } from 'react';
|
|
6
|
+
|
|
7
|
+
import { Separator } from '../../../../../helperComponents';
|
|
8
|
+
import { stopPropagation } from '../../../../../utils';
|
|
9
|
+
import { useNewListContext } from '../../../../Lists/contexts';
|
|
10
|
+
import { ItemId } from '../../../types';
|
|
11
|
+
import { REORDER_TOP_LEVEL } from '../../constants';
|
|
12
|
+
import styles from '../../styles.module.scss';
|
|
13
|
+
import { GroupHeaderContent } from '../../types';
|
|
14
|
+
import { animateLayoutChanges } from '../../utils';
|
|
15
|
+
import { DragHandle } from '../DragHandle';
|
|
16
|
+
|
|
17
|
+
export type SimpleGroupBlockProps = GroupHeaderContent & {
|
|
18
|
+
/** Идентификатор группы — sortable identity для перестановки групп между собой. */
|
|
19
|
+
id: ItemId;
|
|
20
|
+
/** Id сортируемых строк группы для вложенного `SortableContext` (переупорядочивание строк внутри группы). */
|
|
21
|
+
rowIds: ItemId[];
|
|
22
|
+
/** Отрисованные строки группы (`SimpleItem`). */
|
|
23
|
+
children: ReactNode;
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* Сортируемый блок группы reorder-режима: заголовок с ручкой `@dnd-kit` + строки группы во
|
|
28
|
+
* вложенном `SortableContext`. Перетаскивается **вся группа целиком** (заголовок и строки едут
|
|
29
|
+
* вместе), потому что `useSortable` висит на контейнере блока. Строки при этом переставляются
|
|
30
|
+
* внутри своей группы (собственный `SortableContext`). Копию заголовка на время перетаскивания группы
|
|
31
|
+
* рендерит `SimpleGroupBlockOverlay` в `DragOverlay`.
|
|
32
|
+
*/
|
|
33
|
+
export function SimpleGroupBlock({ id, rowIds, children, ...separatorProps }: SimpleGroupBlockProps) {
|
|
34
|
+
const { size = 'm' } = useNewListContext();
|
|
35
|
+
|
|
36
|
+
const { attributes, listeners, setNodeRef, transform, transition, isDragging } = useSortable({
|
|
37
|
+
id,
|
|
38
|
+
// Группа — «брат» строк верхнего уровня: тот же контейнер, что и у строк без группы.
|
|
39
|
+
data: { container: REORDER_TOP_LEVEL },
|
|
40
|
+
animateLayoutChanges,
|
|
41
|
+
});
|
|
42
|
+
|
|
43
|
+
// Идёт ли переупорядочивание строки этой группы (а не самой группы). Оно жёстко ограничено
|
|
44
|
+
// своим контейнером (`container === id` в `data` строки, см. `SimpleItem`), поэтому границы
|
|
45
|
+
// блока группы подсвечиваются — видно, что строка не выходит за пределы группы, а не «сломалась».
|
|
46
|
+
const { active } = useDndContext();
|
|
47
|
+
const activeContainer = (active?.data.current as { container?: ItemId } | undefined)?.container;
|
|
48
|
+
const isReorderingWithinGroup = active != null && active.id !== id && activeContainer === id;
|
|
49
|
+
|
|
50
|
+
const style: CSSProperties = {
|
|
51
|
+
transform: CSS.Translate.toString(transform),
|
|
52
|
+
transition,
|
|
53
|
+
};
|
|
54
|
+
|
|
55
|
+
const { onMouseDown, ...restListeners } = listeners || {};
|
|
56
|
+
|
|
57
|
+
const handleMouseDown = (e: MouseEvent<HTMLElement>) => {
|
|
58
|
+
stopPropagation(e);
|
|
59
|
+
onMouseDown?.(e);
|
|
60
|
+
};
|
|
61
|
+
|
|
62
|
+
return (
|
|
63
|
+
<div
|
|
64
|
+
ref={setNodeRef}
|
|
65
|
+
style={style}
|
|
66
|
+
className={styles.groupBlock}
|
|
67
|
+
data-dragging={isDragging || undefined}
|
|
68
|
+
data-reorder-boundary={isReorderingWithinGroup || undefined}
|
|
69
|
+
>
|
|
70
|
+
<div className={styles.groupHeader} data-size={size}>
|
|
71
|
+
<DragHandle
|
|
72
|
+
// Pointer-жест не доходит до BottomSheet: иначе vertical drag одновременно закрывает sheet.
|
|
73
|
+
{...{ [NO_DRAG_ATTRIBUTE]: '' }}
|
|
74
|
+
{...attributes}
|
|
75
|
+
{...restListeners}
|
|
76
|
+
onMouseDown={handleMouseDown}
|
|
77
|
+
onClick={stopPropagation}
|
|
78
|
+
/>
|
|
79
|
+
<Separator {...separatorProps} />
|
|
80
|
+
</div>
|
|
81
|
+
|
|
82
|
+
<SortableContext items={rowIds} strategy={verticalListSortingStrategy}>
|
|
83
|
+
{children}
|
|
84
|
+
</SortableContext>
|
|
85
|
+
</div>
|
|
86
|
+
);
|
|
87
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './SimpleGroupBlock';
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { Separator } from '../../../../../helperComponents';
|
|
2
|
+
import { Size } from '../../../../../types';
|
|
3
|
+
import { FlattenSimpleItem } from '../../../types';
|
|
4
|
+
import styles from '../../styles.module.scss';
|
|
5
|
+
import { GroupHeaderContent } from '../../types';
|
|
6
|
+
import { OverlayDragHandle } from '../OverlayDragHandle';
|
|
7
|
+
import { SimpleItemOverlay } from '../SimpleItemOverlay';
|
|
8
|
+
|
|
9
|
+
export type SimpleGroupBlockOverlayProps = GroupHeaderContent & {
|
|
10
|
+
/** Размер списка — заголовок повторяет левую раскладку строки (`padding-left` + ручка + `gap`). */
|
|
11
|
+
size?: Size;
|
|
12
|
+
/** Строки группы: копия блока рендерится целиком, вместе с ними. */
|
|
13
|
+
rows: FlattenSimpleItem[];
|
|
14
|
+
};
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Статичная копия блока группы для `DragOverlay` (без `useSortable`): заголовок + строки группы.
|
|
18
|
+
* Блок рендерится целиком, чтобы копия совпадала по размеру с перетаскиваемым блоком — `DragOverlay`
|
|
19
|
+
* подгоняет обёртку под размеры активного узла (весь блок), поэтому одним заголовком её не заполнить.
|
|
20
|
+
*/
|
|
21
|
+
export function SimpleGroupBlockOverlay({ size, rows, ...separatorProps }: SimpleGroupBlockOverlayProps) {
|
|
22
|
+
return (
|
|
23
|
+
<div className={styles.groupBlock} data-overlay>
|
|
24
|
+
<div className={styles.groupHeader} data-size={size}>
|
|
25
|
+
<OverlayDragHandle />
|
|
26
|
+
<Separator {...separatorProps} />
|
|
27
|
+
</div>
|
|
28
|
+
{rows.map(row => (
|
|
29
|
+
<SimpleItemOverlay key={row.id} {...row} bare />
|
|
30
|
+
))}
|
|
31
|
+
</div>
|
|
32
|
+
);
|
|
33
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './SimpleGroupBlockOverlay';
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { useSortable } from '@dnd-kit/sortable';
|
|
2
|
+
import { CSS } from '@dnd-kit/utilities';
|
|
3
|
+
import { NO_DRAG_ATTRIBUTE } from '@cloud-ru/ds-bottom-sheet';
|
|
4
|
+
import { CSSProperties, MouseEvent } from 'react';
|
|
5
|
+
|
|
6
|
+
import { stopPropagation } from '../../../../../utils';
|
|
7
|
+
import { BaseItem } from '../../../BaseItem';
|
|
8
|
+
import { FlattenSimpleItem, ItemId } from '../../../types';
|
|
9
|
+
import { REORDER_TOP_LEVEL } from '../../constants';
|
|
10
|
+
import styles from '../../styles.module.scss';
|
|
11
|
+
import { animateLayoutChanges } from '../../utils';
|
|
12
|
+
import { DragHandle } from '../DragHandle';
|
|
13
|
+
|
|
14
|
+
type SimpleItemProps = FlattenSimpleItem & {
|
|
15
|
+
/** Id группы-родителя (если строка внутри группы) — уходит в `data` `useSortable` (kind=row). */
|
|
16
|
+
groupId?: ItemId;
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Листовая сортируемая строка `List`/`Droplist` в reorder-режиме (проп `onItemsReorder`):
|
|
21
|
+
* `BaseItem` + ручка `@dnd-kit` слева. Группировку задаёт `SimpleGroupItem` уровнем выше.
|
|
22
|
+
*/
|
|
23
|
+
// `option` несёт и служебные поля flatten-модели (`items`/`allChildIds`) — `BaseItem` их не знает
|
|
24
|
+
// и отбрасывает через `extractSupportProps`, в DOM они не попадают.
|
|
25
|
+
export function SimpleItem({ id, disabled, groupId, ...option }: SimpleItemProps) {
|
|
26
|
+
const { attributes, listeners, setNodeRef, transform, transition, isDragging } = useSortable({
|
|
27
|
+
id,
|
|
28
|
+
// `disabled` на строке отключает `Switch` и клик (`BaseItem`), но не переупорядочивание:
|
|
29
|
+
// ручка всегда активна.
|
|
30
|
+
// `container` читает кастомный `collisionDetection` в `ListPrivate`: drop разрешён только внутри
|
|
31
|
+
// одного контейнера. Строка без группы (`groupId` пуст) лежит в общем контейнере верхнего уровня
|
|
32
|
+
// вместе с группами (можно менять местами строку и группу); строка группы — в контейнере группы.
|
|
33
|
+
data: { container: groupId ?? REORDER_TOP_LEVEL },
|
|
34
|
+
animateLayoutChanges,
|
|
35
|
+
});
|
|
36
|
+
|
|
37
|
+
const style: CSSProperties = {
|
|
38
|
+
// Только трансляция без scale: иначе `@dnd-kit` подмешивает scaleY (`adjustScale`) и короткая
|
|
39
|
+
// строка растягивается под высоту соседа. `CSS.Translate` даёт `translate3d` без scale.
|
|
40
|
+
transform: CSS.Translate.toString(transform),
|
|
41
|
+
transition,
|
|
42
|
+
};
|
|
43
|
+
|
|
44
|
+
const { onMouseDown, ...restListeners } = listeners || {};
|
|
45
|
+
|
|
46
|
+
const handleMouseDown = (e: MouseEvent<HTMLElement>) => {
|
|
47
|
+
stopPropagation(e);
|
|
48
|
+
onMouseDown?.(e);
|
|
49
|
+
};
|
|
50
|
+
|
|
51
|
+
return (
|
|
52
|
+
<div ref={setNodeRef} style={style} className={styles.item} data-dragging={isDragging || undefined}>
|
|
53
|
+
<BaseItem
|
|
54
|
+
{...option}
|
|
55
|
+
id={id}
|
|
56
|
+
disabled={disabled}
|
|
57
|
+
dragHandle={
|
|
58
|
+
<DragHandle
|
|
59
|
+
// Pointer-жест не доходит до BottomSheet: иначе vertical drag одновременно закрывает sheet.
|
|
60
|
+
{...{ [NO_DRAG_ATTRIBUTE]: '' }}
|
|
61
|
+
{...attributes}
|
|
62
|
+
{...restListeners}
|
|
63
|
+
onMouseDown={handleMouseDown}
|
|
64
|
+
onClick={stopPropagation}
|
|
65
|
+
/>
|
|
66
|
+
}
|
|
67
|
+
/>
|
|
68
|
+
</div>
|
|
69
|
+
);
|
|
70
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './SimpleItem';
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { BaseItem } from '../../../BaseItem';
|
|
2
|
+
import { FlattenSimpleItem } from '../../../types';
|
|
3
|
+
import styles from '../../styles.module.scss';
|
|
4
|
+
import { OverlayDragHandle } from '../OverlayDragHandle';
|
|
5
|
+
|
|
6
|
+
export type SimpleItemOverlayProps = FlattenSimpleItem & {
|
|
7
|
+
/**
|
|
8
|
+
* Строка внутри копии блока группы (`SimpleGroupBlockOverlay`): поверхность и тень несёт сам
|
|
9
|
+
* блок, поэтому у строки их не дублируем.
|
|
10
|
+
*/
|
|
11
|
+
bare?: boolean;
|
|
12
|
+
};
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Презентационная копия строки для `DragOverlay` (`@dnd-kit`). Рендерится в портале над всей
|
|
16
|
+
* страницей и едет за курсором, поэтому строку не режет `overflow: hidden` контейнера `List`
|
|
17
|
+
* (см. [visual-regression] клиппинг). В отличие от `SimpleItem`, не вызывает `useSortable` —
|
|
18
|
+
* это неинтерактивный снимок: ручка и содержимое статичны, перетаскивание ведёт исходная строка.
|
|
19
|
+
*/
|
|
20
|
+
export function SimpleItemOverlay({ bare, ...item }: SimpleItemOverlayProps) {
|
|
21
|
+
return (
|
|
22
|
+
<div className={styles.item} data-overlay={bare ? undefined : true}>
|
|
23
|
+
<BaseItem {...item} dragHandle={<OverlayDragHandle />} />
|
|
24
|
+
</div>
|
|
25
|
+
);
|
|
26
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './SimpleItemOverlay';
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { ItemId } from '../types';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Sortable-контейнер верхнего уровня reorder-режима. Строки без группы и сами группы лежат в одном
|
|
5
|
+
* контейнере (переставляются как «братья»), строки внутри группы — в контейнере со `id` группы.
|
|
6
|
+
* Кастомный `collisionDetection` в `ListPrivate` пускает drop только в пределах одного контейнера.
|
|
7
|
+
*/
|
|
8
|
+
export const REORDER_TOP_LEVEL: ItemId = '__reorder-top-level__';
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
@use '@cloud-ru/ds-figma-variables/build/scss/styles/styles.module' as base;
|
|
2
|
+
@use '@cloud-ru/ds-figma-variables/build/scss/components/list.module' as list;
|
|
3
|
+
@use '../../../iconSizes' as icons;
|
|
4
|
+
|
|
5
|
+
$sizes: 's', 'm', 'l';
|
|
6
|
+
|
|
7
|
+
// Отступ слева и gap строки списка по размеру — чтобы ручка заголовка группы вставала ровно над
|
|
8
|
+
// ручками строк. Используются плоские Figma-переменные (как в `BaseItem`), навигация по
|
|
9
|
+
// `list.$list` тут не проходит.
|
|
10
|
+
$listItemPaddingLeft: (
|
|
11
|
+
's': list.$sn-list-anatomy-size-s-listItem-paddingHorizontal,
|
|
12
|
+
'm': list.$sn-list-anatomy-size-m-listItem-paddingHorizontal,
|
|
13
|
+
'l': list.$sn-list-anatomy-size-l-listItem-paddingHorizontal,
|
|
14
|
+
);
|
|
15
|
+
$listItemGap: (
|
|
16
|
+
's': list.$sn-list-anatomy-size-s-listItem-gap,
|
|
17
|
+
'm': list.$sn-list-anatomy-size-m-listItem-gap,
|
|
18
|
+
'l': list.$sn-list-anatomy-size-l-listItem-gap,
|
|
19
|
+
);
|
|
20
|
+
// Асимметричные вертикальные отступы заголовка группы (`Separator`): сверху — `subtitle.paddingTop`
|
|
21
|
+
// (визуальный зазор над группой), снизу — `listItem.paddingVertical`. Из-за перекоса текст стоит
|
|
22
|
+
// ниже центра box'а, поэтому ручка перетаскивания сдвинута вниз на их разницу (см. `.dragHandle`
|
|
23
|
+
// ниже).
|
|
24
|
+
$subtitlePaddingTop: (
|
|
25
|
+
's': list.$sn-list-anatomy-size-s-subtitle-paddingTop,
|
|
26
|
+
'm': list.$sn-list-anatomy-size-m-subtitle-paddingTop,
|
|
27
|
+
'l': list.$sn-list-anatomy-size-l-subtitle-paddingTop,
|
|
28
|
+
);
|
|
29
|
+
$listItemPaddingVertical: (
|
|
30
|
+
's': list.$sn-list-anatomy-size-s-listItem-paddingVertical,
|
|
31
|
+
'm': list.$sn-list-anatomy-size-m-listItem-paddingVertical,
|
|
32
|
+
'l': list.$sn-list-anatomy-size-l-listItem-paddingVertical,
|
|
33
|
+
);
|
|
34
|
+
|
|
35
|
+
.item {
|
|
36
|
+
// Исходная строка во время переноса — приглушённый «призрак» на месте будущей позиции.
|
|
37
|
+
// Саму перетаскиваемую копию рендерит `DragOverlay` (`SimpleItemOverlay`) в портале.
|
|
38
|
+
&[data-dragging] {
|
|
39
|
+
position: relative;
|
|
40
|
+
z-index: 1;
|
|
41
|
+
opacity: 0.5;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
// Плавающая копия в `DragOverlay`: сплошная поверхность + elevation, чтобы строка читалась
|
|
45
|
+
// над фоном страницы (портал вне контейнера List, своего фона у строки нет).
|
|
46
|
+
&[data-overlay] {
|
|
47
|
+
cursor: grabbing;
|
|
48
|
+
opacity: 0.5;
|
|
49
|
+
background: base.$sn-theme-color-neutral-background2Level;
|
|
50
|
+
box-shadow: base.$sn-boxShadow-elevation-level2;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
// Сортируемый блок группы (`SimpleGroupBlock`): заголовок + строки едут вместе (`useSortable` на
|
|
55
|
+
// блоке). Во время перетаскивания блок целиком приглушён «призраком».
|
|
56
|
+
.groupBlock {
|
|
57
|
+
&[data-dragging] {
|
|
58
|
+
position: relative;
|
|
59
|
+
z-index: 1;
|
|
60
|
+
opacity: 0.5;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
// Плавающая копия блока в `DragOverlay` (перетаскивание группы): сплошная поверхность + elevation
|
|
64
|
+
// на весь блок (заголовок + строки), чтобы читалась над фоном страницы.
|
|
65
|
+
&[data-overlay] {
|
|
66
|
+
cursor: grabbing;
|
|
67
|
+
opacity: 0.5;
|
|
68
|
+
background: base.$sn-theme-color-neutral-background2Level;
|
|
69
|
+
box-shadow: base.$sn-boxShadow-elevation-level2;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
// Подсветка границ группы при переупорядочивании строки внутри неё (`data-reorder-boundary`):
|
|
73
|
+
// даёт понять, что перестановка ограничена группой, иначе остановка у границы читается как баг.
|
|
74
|
+
&[data-reorder-boundary] {
|
|
75
|
+
background: base.$sn-theme-color-neutral-background1Level;
|
|
76
|
+
box-shadow:
|
|
77
|
+
inset 0 6px 12px -12px base.$sn-theme-color-blackout,
|
|
78
|
+
inset 0 -6px 12px -12px base.$sn-theme-color-blackout;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
// Строка-заголовок внутри блока группы: ручка перетаскивания + `Separator`. Отступ слева и gap — как у
|
|
83
|
+
// строки (`listItem`), чтобы ручка заголовка стояла ровно над ручками строк.
|
|
84
|
+
.groupHeader {
|
|
85
|
+
display: flex;
|
|
86
|
+
align-items: center;
|
|
87
|
+
|
|
88
|
+
// Separator занимает всю оставшуюся ширину.
|
|
89
|
+
> :last-child {
|
|
90
|
+
flex: 1 1 auto;
|
|
91
|
+
min-width: 0;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
@each $size in $sizes {
|
|
95
|
+
&[data-size='#{$size}'] {
|
|
96
|
+
gap: base.simple-var($listItemGap, $size);
|
|
97
|
+
padding-left: base.simple-var($listItemPaddingLeft, $size);
|
|
98
|
+
|
|
99
|
+
// Собственный `padding-left` `Separator`'а компенсируется отрицательным margin: иначе левый
|
|
100
|
+
// отступ удваивается и контент заголовка не встаёт ровно над контентом строк.
|
|
101
|
+
> :last-child {
|
|
102
|
+
margin-left: calc(-1 * #{base.simple-var($listItemPaddingLeft, $size)});
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
// Ручка заголовка по icon-сетке строки (как before/after слоты у BaseItem).
|
|
106
|
+
.dragHandle {
|
|
107
|
+
width: base.simple-var(icons.$iconSizeMap, $size);
|
|
108
|
+
height: base.simple-var(icons.$iconSizeMap, $size);
|
|
109
|
+
|
|
110
|
+
// Верхний отступ `Separator`'а (`subtitle.paddingTop`) больше нижнего, поэтому текст стоит
|
|
111
|
+
// ниже центра box'а — ручка сдвинута вниз на разницу отступов, чтобы её центр совпал с текстом.
|
|
112
|
+
margin-top: calc(
|
|
113
|
+
#{base.simple-var($subtitlePaddingTop, $size)} - #{base.simple-var($listItemPaddingVertical, $size)}
|
|
114
|
+
);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
// Ручка перетаскивания — плоская иконка-кнопка: дефолтные обводка и фон сброшены, цвет вторичный.
|
|
121
|
+
// То же, что у ручки строки, которую `BaseItem` сбрасывает через свою `.dragHandle button`.
|
|
122
|
+
.dragHandle {
|
|
123
|
+
cursor: grab;
|
|
124
|
+
|
|
125
|
+
display: flex;
|
|
126
|
+
align-items: center;
|
|
127
|
+
justify-content: center;
|
|
128
|
+
|
|
129
|
+
padding: 0;
|
|
130
|
+
border: none;
|
|
131
|
+
|
|
132
|
+
color: base.$sn-theme-color-available-version-textSecondary;
|
|
133
|
+
|
|
134
|
+
appearance: none;
|
|
135
|
+
background: transparent;
|
|
136
|
+
|
|
137
|
+
svg {
|
|
138
|
+
width: 100%;
|
|
139
|
+
height: 100%;
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
&:active {
|
|
143
|
+
cursor: grabbing;
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
&:disabled {
|
|
147
|
+
cursor: not-allowed;
|
|
148
|
+
}
|
|
149
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { SeparatorProps } from '../../../helperComponents';
|
|
2
|
+
|
|
3
|
+
/** Поля заголовка группы, общие для сортируемого блока и его копии в `DragOverlay`. */
|
|
4
|
+
export type GroupHeaderContent = Pick<
|
|
5
|
+
SeparatorProps,
|
|
6
|
+
'label' | 'beforeContent' | 'truncate' | 'divider' | 'groupVariant'
|
|
7
|
+
>;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Отключает FLIP-анимацию перестановки после отпускания (общий контракт `SimpleItem` и `SimpleGroupBlock`).
|
|
3
|
+
* Порядок применяется синхронно через `onItemsReorder`; без флага `@dnd-kit` доигрывает `transform 200ms`
|
|
4
|
+
* из старого слота в новый — отпущенная строка дёргается обратно и уезжает на место.
|
|
5
|
+
*/
|
|
6
|
+
export function animateLayoutChanges(): boolean {
|
|
7
|
+
return false;
|
|
8
|
+
}
|