@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,62 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.ReorderableList = exports.List = void 0;
|
|
7
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
8
|
+
const utils_1 = require("@cloud-ru/ds-utils");
|
|
9
|
+
const classnames_1 = __importDefault(require("classnames"));
|
|
10
|
+
const merge_refs_1 = __importDefault(require("merge-refs"));
|
|
11
|
+
const react_1 = require("react");
|
|
12
|
+
const constants_1 = require("../../../constants");
|
|
13
|
+
const helperComponents_1 = require("../../../helperComponents");
|
|
14
|
+
const contexts_1 = require("../contexts");
|
|
15
|
+
const hooks_1 = require("../hooks");
|
|
16
|
+
const ListPrivate_1 = require("../ListPrivate");
|
|
17
|
+
const styles_module_scss_1 = __importDefault(require('../styles.module.css'));
|
|
18
|
+
const ListImpl = (0, react_1.forwardRef)(({ items: itemsProp = [], search, pinBottom: pinBottomProp = [], pinTop: pinTopProp = [], footerActiveElementsRefs, onKeyDown, tabIndex = 0, className, collapse = {}, selection, contentRender, size = constants_1.DEFAULT_SIZE, marker = true, keyboardNavigationRef, hasListInFocusChain = true, onItemsReorder, ...props }, ref) => {
|
|
19
|
+
const { openCollapseItems, toggleOpenCollapseItem, searchItem, flattenItems, focusFlattenItems, memorizedItems, ids, expandedIds, firstItemId, onDragEnd, sortableIds, } = (0, hooks_1.useListItemsModel)({
|
|
20
|
+
items: itemsProp,
|
|
21
|
+
pinTop: pinTopProp,
|
|
22
|
+
pinBottom: pinBottomProp,
|
|
23
|
+
search,
|
|
24
|
+
collapse,
|
|
25
|
+
selectionMode: selection?.mode,
|
|
26
|
+
footerActiveElementsRefs,
|
|
27
|
+
onItemsReorder,
|
|
28
|
+
});
|
|
29
|
+
const listRef = (0, react_1.useRef)(null);
|
|
30
|
+
const btnRef = (0, react_1.useRef)(null);
|
|
31
|
+
const { handleListKeyDownFactory, activeItemId, resetActiveItemId, forceUpdateActiveItemId } = (0, hooks_1.useNewKeyboardNavigation)({
|
|
32
|
+
mainRef: listRef,
|
|
33
|
+
btnRef,
|
|
34
|
+
focusFlattenItems,
|
|
35
|
+
keyboardNavigationRef,
|
|
36
|
+
hasListInFocusChain,
|
|
37
|
+
firstItemId,
|
|
38
|
+
});
|
|
39
|
+
const handleListKeyDown = (0, react_1.useCallback)((e) => handleListKeyDownFactory(ids, expandedIds)(e), [handleListKeyDownFactory, ids, expandedIds]);
|
|
40
|
+
const isActive = (0, utils_1.isBrowser)() && listRef.current === document.activeElement && activeItemId === undefined;
|
|
41
|
+
const mergedHandlerKeyDown = (e) => {
|
|
42
|
+
onKeyDown?.(e);
|
|
43
|
+
handleListKeyDown?.(e);
|
|
44
|
+
};
|
|
45
|
+
const handleOnFocus = () => {
|
|
46
|
+
resetActiveItemId();
|
|
47
|
+
};
|
|
48
|
+
const collapseContextValue = (0, react_1.useMemo)(() => ({ openCollapseItems, toggleOpenCollapseItem }), [openCollapseItems, toggleOpenCollapseItem]);
|
|
49
|
+
const focusListContextValue = (0, react_1.useMemo)(() => ({ activeItemId, handleListKeyDownFactory, forceUpdateActiveItemId }), [activeItemId, handleListKeyDownFactory, forceUpdateActiveItemId]);
|
|
50
|
+
return ((0, jsx_runtime_1.jsx)(contexts_1.NewListContextProvider, { flattenItems: flattenItems, focusFlattenItems: focusFlattenItems, contentRender: contentRender, size: size, marker: marker, firstItemId: firstItemId, virtualized: props.virtualized, children: (0, jsx_runtime_1.jsx)(contexts_1.SelectionProvider, { ...selection, children: (0, jsx_runtime_1.jsx)(contexts_1.CollapseContext.Provider, { value: collapseContextValue, children: (0, jsx_runtime_1.jsx)(contexts_1.FocusListContext.Provider, { value: focusListContextValue, children: (0, jsx_runtime_1.jsxs)("div", { className: (0, classnames_1.default)(styles_module_scss_1.default.wrapper, className), "data-active": isActive || undefined, children: [(0, jsx_runtime_1.jsx)(ListPrivate_1.ListPrivate, { ...props, items: memorizedItems.items.focusCloseChildIds, pinTop: memorizedItems.pinTop.focusCloseChildIds, pinBottom: memorizedItems.pinBottom.focusCloseChildIds, searchItem: searchItem, ref: (0, merge_refs_1.default)(ref, listRef), onFocus: handleOnFocus, onKeyDown: mergedHandlerKeyDown, tabIndex: hasListInFocusChain ? tabIndex : undefined, search: search, nested: false, onDragEnd: onDragEnd, sortableIds: sortableIds }), hasListInFocusChain && (0, jsx_runtime_1.jsx)(helperComponents_1.HiddenTabButton, { ref: btnRef, listRef: listRef, tabIndex: tabIndex })] }) }) }) }) }));
|
|
51
|
+
});
|
|
52
|
+
ListImpl.displayName = 'ListImpl';
|
|
53
|
+
/** Список айтемов: base / collapse / group / next-list, с опциональной виртуализацией. */
|
|
54
|
+
exports.List = (0, react_1.forwardRef)((props, ref) => (0, jsx_runtime_1.jsx)(ListImpl, { ...props, ref: ref }));
|
|
55
|
+
exports.List.displayName = 'List';
|
|
56
|
+
/**
|
|
57
|
+
* Список с drag&drop-переупорядочиванием строк за ручку слева. Управляемый: порядок не хранит,
|
|
58
|
+
* а отдаёт обновлённое дерево в `onItemsReorder`. Модель айтемов — `ReorderItem` (плоская строка
|
|
59
|
+
* либо группа с заголовком); `collapse`/`next-list`/`group-select` и виртуализация не поддержаны.
|
|
60
|
+
*/
|
|
61
|
+
exports.ReorderableList = (0, react_1.forwardRef)((props, ref) => ((0, jsx_runtime_1.jsx)(ListImpl, { ...props, ref: ref })));
|
|
62
|
+
exports.ReorderableList.displayName = 'ReorderableList';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './List';
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./List"), exports);
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { DragEndEvent } from '@dnd-kit/core';
|
|
2
|
+
import { ItemId } from '../../Items';
|
|
3
|
+
export declare const ListPrivate: import("react").ForwardRefExoticComponent<Omit<import("../types").ListImplProps, "items" | "virtualized" | "hasListInFocusChain" | "pinTop" | "pinBottom" | "onItemsReorder"> & {
|
|
4
|
+
nested?: boolean;
|
|
5
|
+
active?: boolean;
|
|
6
|
+
tabIndex?: number;
|
|
7
|
+
virtualized?: boolean;
|
|
8
|
+
onFocus?(e: import("react").FocusEvent<HTMLElement>): void;
|
|
9
|
+
onBlur?(e: import("react").FocusEvent<HTMLElement>): void;
|
|
10
|
+
onKeyDown?(e: import("react").KeyboardEvent<HTMLElement>): void;
|
|
11
|
+
limitedScrollHeight?: boolean;
|
|
12
|
+
searchItem?: import("../../Items").FlattenBaseItem;
|
|
13
|
+
pinTop?: ItemId[];
|
|
14
|
+
items: ItemId[];
|
|
15
|
+
pinBottom?: ItemId[];
|
|
16
|
+
onDragEnd?(event: DragEndEvent): void;
|
|
17
|
+
sortableIds?: ItemId[];
|
|
18
|
+
} & import("react").RefAttributes<HTMLElement>>;
|
|
@@ -0,0 +1,301 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.ListPrivate = void 0;
|
|
7
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
8
|
+
const core_1 = require("@dnd-kit/core");
|
|
9
|
+
const sortable_1 = require("@dnd-kit/sortable");
|
|
10
|
+
const loader_1 = require("@cloud-ru/ds-loader");
|
|
11
|
+
const portal_context_1 = require("@cloud-ru/ds-portal-context");
|
|
12
|
+
const scroll_1 = require("@cloud-ru/ds-scroll");
|
|
13
|
+
const utils_1 = require("@cloud-ru/ds-utils");
|
|
14
|
+
const react_virtual_1 = require("@tanstack/react-virtual");
|
|
15
|
+
const classnames_1 = __importDefault(require("classnames"));
|
|
16
|
+
const merge_refs_1 = __importDefault(require("merge-refs"));
|
|
17
|
+
const react_1 = require("react");
|
|
18
|
+
const react_dom_1 = require("react-dom");
|
|
19
|
+
const constants_1 = require("../../../constants");
|
|
20
|
+
const helperComponents_1 = require("../../../helperComponents");
|
|
21
|
+
const utils_2 = require("../../../utils");
|
|
22
|
+
const Items_1 = require("../../Items");
|
|
23
|
+
const SimpleItem_1 = require("../../Items/SimpleItem");
|
|
24
|
+
const contexts_1 = require("../contexts");
|
|
25
|
+
const styles_module_scss_1 = __importDefault(require('../styles.module.css'));
|
|
26
|
+
const constants_2 = require("./constants");
|
|
27
|
+
const styles_module_scss_2 = __importDefault(require('./styles.module.css'));
|
|
28
|
+
// Отделяет клик (activation через `onClick` айтема) от начала перетаскивания — тот же порог активации,
|
|
29
|
+
// что у `@cloud-ru/ds-table` (`useColumnOrderByDrag`), для единообразия поведения по репо.
|
|
30
|
+
const draggingOptions = { activationConstraint: { distance: 5 } };
|
|
31
|
+
// Пересчитывать rect'ы droppable-строк на каждом кадре перетаскивания. В `Droplist` (popover) список лежит
|
|
32
|
+
// в скролл-контейнере с трансформами: измеренные при монтировании rect'ы устаревают, коллизия
|
|
33
|
+
// указывает на последнюю строку и строка «улетает» в конец. `Always` держит измерения свежими.
|
|
34
|
+
const measuringConfig = { droppable: { strategy: core_1.MeasuringStrategy.Always } };
|
|
35
|
+
/**
|
|
36
|
+
* Центрирует элемент внутри своего scroll-контейнера правкой `scrollTop` контейнера.
|
|
37
|
+
* В отличие от `element.scrollIntoView({ block: 'center' })`, НЕ скроллит вышестоящие предки
|
|
38
|
+
* (включая window) — иначе при монтировании списка с `scrollToSelectedItem` страница доков
|
|
39
|
+
* «дёргалась» (окно прыгало, чтобы показать выбранный элемент). См. ревью MR!101.
|
|
40
|
+
*/
|
|
41
|
+
function centerItemInScrollContainer(container, item) {
|
|
42
|
+
if (!container || !item) {
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
const containerRect = container.getBoundingClientRect();
|
|
46
|
+
const itemRect = item.getBoundingClientRect();
|
|
47
|
+
const delta = itemRect.top - containerRect.top - (container.clientHeight - itemRect.height) / 2;
|
|
48
|
+
container.scrollTop += delta;
|
|
49
|
+
}
|
|
50
|
+
exports.ListPrivate = (0, react_1.forwardRef)(({ items, pinTop, pinBottom, onKeyDown, onBlur, onFocus, tabIndex, active, scroll, nested, search, searchItem, scrollRef, scrollContainerRef, onScroll, footer, header, headerDivider, footerDivider, loading, limitedScrollHeight, untouchableScrollbars, className, noDataState, noResultsState, errorDataState, dataError, dataFiltered, scrollToSelectedItem = false, virtualized: virtualizedProp = false, scrollContainerClassName, barHideStrategy = 'never', onDragEnd, sortableIds, ...props }, ref) => {
|
|
51
|
+
const { size = constants_1.DEFAULT_SIZE, flattenItems, focusFlattenItems } = (0, contexts_1.useNewListContext)();
|
|
52
|
+
const { value, isSelectionSingle } = (0, contexts_1.useSelectionContext)();
|
|
53
|
+
// `onDragEnd`/`SortableContext` конфликтуют с виртуализатором: обе стороны применяют свой
|
|
54
|
+
// `transform` к строке (см. JSDoc `ListPrivateProps.onDragEnd`) — запрещено уже на уровне
|
|
55
|
+
// типов (`ListProps`), здесь рантайм-зеркало на случай прямого использования `ListPrivate`.
|
|
56
|
+
const virtualized = virtualizedProp && !onDragEnd;
|
|
57
|
+
const sensors = (0, core_1.useSensors)((0, core_1.useSensor)(core_1.MouseSensor, draggingOptions), (0, core_1.useSensor)(core_1.TouchSensor, {}), (0, core_1.useSensor)(core_1.KeyboardSensor, { coordinateGetter: sortable_1.sortableKeyboardCoordinates }));
|
|
58
|
+
// Id перетаскиваемой строки — для рендера её копии в `DragOverlay`. Копия живёт в портале
|
|
59
|
+
// над страницей и не режется `overflow: hidden` контейнера `List` (исходная строка остаётся
|
|
60
|
+
// на месте «призраком»). `null`, когда перетаскивание не идёт.
|
|
61
|
+
const [activeDragId, setActiveDragId] = (0, react_1.useState)(null);
|
|
62
|
+
const handleDragStart = (0, react_1.useCallback)((event) => setActiveDragId(event.active.id), []);
|
|
63
|
+
const handleDragEnd = (0, react_1.useCallback)((event) => {
|
|
64
|
+
setActiveDragId(null);
|
|
65
|
+
onDragEnd?.(event);
|
|
66
|
+
}, [onDragEnd]);
|
|
67
|
+
const handleDragCancel = (0, react_1.useCallback)(() => setActiveDragId(null), []);
|
|
68
|
+
const activeOverlayItem = activeDragId != null ? flattenItems[activeDragId] : undefined;
|
|
69
|
+
// Переупорядочивание строго внутри одного sortable-контейнера: верхний уровень (строки без группы + сами
|
|
70
|
+
// группы — «братья») либо контейнер конкретной группы (её строки). Остаются только droppable
|
|
71
|
+
// того же контейнера, что и активный элемент (`container` в `data` ставят `SimpleItem`/
|
|
72
|
+
// `SimpleGroupBlock`).
|
|
73
|
+
const collisionDetection = (0, react_1.useCallback)(args => {
|
|
74
|
+
const activeContainer = args.active.data.current?.container;
|
|
75
|
+
const droppableContainers = args.droppableContainers.filter(container => container.data.current?.container === activeContainer);
|
|
76
|
+
// Сначала — droppable под курсором (`pointerWithin`). Группа сортируется целым блоком
|
|
77
|
+
// (`SimpleGroupBlock`: заголовок + строки), поэтому её droppable-rect высокий; `closestCenter`
|
|
78
|
+
// сравнивал бы расстояние до центра блока — курсор над заголовком группы был далеко от центра,
|
|
79
|
+
// и цель «перепрыгивала» через всю группу (строка вставала под неё). `pointerWithin` берёт тот
|
|
80
|
+
// блок, над которым реально курсор, — вставка идёт туда, где визуально находится указатель.
|
|
81
|
+
const pointerCollisions = (0, core_1.pointerWithin)({ ...args, droppableContainers });
|
|
82
|
+
if (pointerCollisions.length > 0) {
|
|
83
|
+
return pointerCollisions;
|
|
84
|
+
}
|
|
85
|
+
// Fallback для клавиатурного сенсора (у него нет координат указателя → `pointerWithin` пуст).
|
|
86
|
+
return (0, core_1.closestCenter)({ ...args, droppableContainers });
|
|
87
|
+
}, []);
|
|
88
|
+
// Портал `DragOverlay` — в themed-корень (`@cloud-ru/ds-portal-context`), а не в `document.body`. Все
|
|
89
|
+
// `--sn-*` токены объявлены на theme-scope (`RootThemeProvider`), а не на `:root`; в `body`
|
|
90
|
+
// копия строки теряла их и падала на дефолты (раздутые паддинги/цвета — «гигантский призрак»).
|
|
91
|
+
// Корень портал-контекста лежит внутри theme-scope и не трансформирован, поэтому `position:
|
|
92
|
+
// fixed` у `DragOverlay` остаётся относительно вьюпорта (в т.ч. внутри popover-Droplist).
|
|
93
|
+
const portalRoot = (0, portal_context_1.usePortalContext)();
|
|
94
|
+
const innerScrollRef = (0, react_1.useRef)(null);
|
|
95
|
+
// `@cloud-ru/ds-scroll` (OverlayScrollbars) разрешает свой ref в viewport-элемент только после
|
|
96
|
+
// инициализации инстанса. До этого `innerScrollRef.current` === null, и виртуализатор
|
|
97
|
+
// не получает scroll-элемент → рендерит пустой контейнер. Флаг поднимается из
|
|
98
|
+
// `onInitialized` и форсит повторный `measure()` уже с готовым viewport'ом.
|
|
99
|
+
const [scrollElementReady, setScrollElementReady] = (0, react_1.useState)(false);
|
|
100
|
+
const itemsJSX = (0, Items_1.useRenderItems)(items);
|
|
101
|
+
const itemsPinTopJSX = (0, Items_1.useRenderItems)(pinTop);
|
|
102
|
+
const itemsPinBottomJSX = (0, Items_1.useRenderItems)(pinBottom);
|
|
103
|
+
const pinTopItemsPresent = Number(pinTop?.length) > 0;
|
|
104
|
+
const pinBottomItemsPresent = Number(pinBottom?.length) > 0;
|
|
105
|
+
const [scrollState, setScrollState] = (0, react_1.useState)({ virtualizer: null, browser: null, measured: false });
|
|
106
|
+
const emptyStates = (0, helperComponents_1.useEmptyState)({ noDataState, noResultsState, errorDataState });
|
|
107
|
+
const hasNoItems = items.length === 0;
|
|
108
|
+
const { selectedItemIndex, selectedItem } = (0, react_1.useMemo)(() => {
|
|
109
|
+
const result = {
|
|
110
|
+
selectedItemIndex: -1,
|
|
111
|
+
selectedItem: undefined,
|
|
112
|
+
};
|
|
113
|
+
if (!scrollToSelectedItem || !value) {
|
|
114
|
+
return result;
|
|
115
|
+
}
|
|
116
|
+
const selectedItem = isSelectionSingle ? flattenItems[value] : flattenItems[value[0]];
|
|
117
|
+
if (!selectedItem?.id) {
|
|
118
|
+
return result;
|
|
119
|
+
}
|
|
120
|
+
const allFocusFlattenItems = Object.values(focusFlattenItems);
|
|
121
|
+
const index = allFocusFlattenItems.findIndex(item => item.originalId === selectedItem.id);
|
|
122
|
+
if (index < 0) {
|
|
123
|
+
return result;
|
|
124
|
+
}
|
|
125
|
+
return {
|
|
126
|
+
selectedItemIndex: index,
|
|
127
|
+
selectedItem: allFocusFlattenItems[index],
|
|
128
|
+
};
|
|
129
|
+
}, [flattenItems, focusFlattenItems, isSelectionSingle, scrollToSelectedItem, value]);
|
|
130
|
+
// Реальная высота строки может превышать однострочный `ALL_SIZES[size]` (например, item с
|
|
131
|
+
// `description` — двухстрочный). Если estimateSize занижен, незамеренные строки оцениваются
|
|
132
|
+
// меньше реальных, и по мере прокрутки `measureElement` правит totalSize — контент «скачет».
|
|
133
|
+
// Меряем фактическую высоту первой отрисованной строки и используем как оценку для остальных:
|
|
134
|
+
// totalSize становится точным сразу, скачок пропадает. measureElement по-прежнему уточняет
|
|
135
|
+
// разнородные строки построчно.
|
|
136
|
+
const [measuredRowSize, setMeasuredRowSize] = (0, react_1.useState)(null);
|
|
137
|
+
const virtualizer = (0, react_virtual_1.useVirtualizer)({
|
|
138
|
+
count: itemsJSX.length,
|
|
139
|
+
// Зависимость на `scrollElementReady` заставляет виртуализатор перечитать scroll-элемент
|
|
140
|
+
// после инициализации OverlayScrollbars (когда `innerScrollRef.current` уже не null).
|
|
141
|
+
getScrollElement: () => (scroll && scrollElementReady ? innerScrollRef.current : null),
|
|
142
|
+
estimateSize: () => measuredRowSize ?? constants_2.ALL_SIZES[size],
|
|
143
|
+
enabled: virtualized,
|
|
144
|
+
overscan: 5, // Amount of elements in DOM before/after visible ones
|
|
145
|
+
});
|
|
146
|
+
const virtualItems = virtualizer.getVirtualItems();
|
|
147
|
+
// Сбрасываем измеренную оценку при смене size — однострочная база снова станет дефолтом
|
|
148
|
+
// до первого замера новой плотности.
|
|
149
|
+
(0, react_1.useEffect)(() => {
|
|
150
|
+
setMeasuredRowSize(null);
|
|
151
|
+
}, [size]);
|
|
152
|
+
// Замер реальной высоты первой строки после её отрисовки (до того, как пользователь начнёт
|
|
153
|
+
// скроллить). Один замер на size: как только оценка зафиксирована, эффект больше ничего не
|
|
154
|
+
// делает (measureElement продолжает уточнять разнородные строки построчно).
|
|
155
|
+
const hasRenderedRows = virtualItems.length > 0;
|
|
156
|
+
(0, utils_1.useLayoutEffect)(() => {
|
|
157
|
+
if (!virtualized || !scrollElementReady || measuredRowSize !== null || !hasRenderedRows) {
|
|
158
|
+
return;
|
|
159
|
+
}
|
|
160
|
+
const firstRow = innerScrollRef.current?.querySelector('[data-index]');
|
|
161
|
+
const height = firstRow?.offsetHeight;
|
|
162
|
+
if (height && Math.abs(height - constants_2.ALL_SIZES[size]) > 1) {
|
|
163
|
+
setMeasuredRowSize(height);
|
|
164
|
+
}
|
|
165
|
+
}, [virtualized, scrollElementReady, measuredRowSize, hasRenderedRows, size]);
|
|
166
|
+
(0, react_1.useEffect)(() => {
|
|
167
|
+
if (!scrollElementReady) {
|
|
168
|
+
return; // Scroll-элемент ещё не готов — измерять нечего, иначе фиксируем пустой кадр.
|
|
169
|
+
}
|
|
170
|
+
if (scrollState.measured) {
|
|
171
|
+
return;
|
|
172
|
+
}
|
|
173
|
+
virtualizer.measure();
|
|
174
|
+
setScrollState(prevState => ({
|
|
175
|
+
...prevState,
|
|
176
|
+
measured: true,
|
|
177
|
+
}));
|
|
178
|
+
}, [scrollElementReady, scrollState.measured, virtualizer]);
|
|
179
|
+
const isScrollToItemEnabled = scroll && scrollToSelectedItem && virtualized;
|
|
180
|
+
(0, react_1.useEffect)(() => {
|
|
181
|
+
if (isScrollToItemEnabled) {
|
|
182
|
+
if (!scrollState.measured) {
|
|
183
|
+
return; // Not measured yet
|
|
184
|
+
}
|
|
185
|
+
if (selectedItemIndex < 0 || !selectedItem) {
|
|
186
|
+
return; // Cannot scroll to non-existing item
|
|
187
|
+
}
|
|
188
|
+
if (scrollState.virtualizer === selectedItem.originalId) {
|
|
189
|
+
return; // No need to re-scroll to the same item during re-renders
|
|
190
|
+
}
|
|
191
|
+
if (selectedItem?.itemRef && innerScrollRef.current?.contains(selectedItem?.itemRef.current)) {
|
|
192
|
+
return; // No need to scroll to manually clicked item currently present in DOM
|
|
193
|
+
}
|
|
194
|
+
virtualizer.scrollToIndex(selectedItemIndex, { align: 'center' });
|
|
195
|
+
setScrollState(prevState => ({
|
|
196
|
+
...prevState,
|
|
197
|
+
virtualizer: selectedItem.originalId,
|
|
198
|
+
}));
|
|
199
|
+
}
|
|
200
|
+
}, [isScrollToItemEnabled, scrollState, selectedItem, selectedItemIndex, virtualizer]);
|
|
201
|
+
const isTargetPresentInDom = Boolean(selectedItem?.itemRef?.current);
|
|
202
|
+
(0, react_1.useEffect)(() => {
|
|
203
|
+
if (!selectedItem) {
|
|
204
|
+
return;
|
|
205
|
+
}
|
|
206
|
+
if (scrollState.virtualizer === null) {
|
|
207
|
+
return; // Not scrolled by virtualizer yet, no need for additional scroll
|
|
208
|
+
}
|
|
209
|
+
if (!isTargetPresentInDom) {
|
|
210
|
+
return; // Target element is not present in DOM yet, additional scroll does not work without it
|
|
211
|
+
}
|
|
212
|
+
if (scrollState.virtualizer === scrollState.browser) {
|
|
213
|
+
return; // Virtualizer scroll has not been executed => no need for additional scroll
|
|
214
|
+
}
|
|
215
|
+
centerItemInScrollContainer(innerScrollRef.current, selectedItem.itemRef?.current ?? null);
|
|
216
|
+
setScrollState(prevState => ({
|
|
217
|
+
...prevState,
|
|
218
|
+
browser: selectedItem.originalId,
|
|
219
|
+
}));
|
|
220
|
+
}, [scrollState, selectedItem, isTargetPresentInDom, selectedItemIndex]);
|
|
221
|
+
// Non-virtualized: центрируем выбранный элемент в собственном scroll-контейнере при смене
|
|
222
|
+
// `selection` (на первом маунте это делает `onScrollInitialized`). Виртуализованный путь
|
|
223
|
+
// ведут эффекты выше через виртуализатор, поэтому здесь только `!virtualized`. Хелпер тот
|
|
224
|
+
// же `centerItemInScrollContainer` — обычному листу отдельный виртуализатор не нужен.
|
|
225
|
+
(0, react_1.useEffect)(() => {
|
|
226
|
+
if (virtualized || !scroll || !scrollToSelectedItem || !scrollElementReady) {
|
|
227
|
+
return;
|
|
228
|
+
}
|
|
229
|
+
const container = innerScrollRef.current;
|
|
230
|
+
const item = selectedItem?.itemRef?.current ?? null;
|
|
231
|
+
if (!container || !item) {
|
|
232
|
+
return;
|
|
233
|
+
}
|
|
234
|
+
centerItemInScrollContainer(container, item);
|
|
235
|
+
}, [virtualized, scroll, scrollToSelectedItem, scrollElementReady, selectedItem]);
|
|
236
|
+
const loadingJSX = (0, react_1.useMemo)(() => loading && ((0, jsx_runtime_1.jsx)("div", { role: 'status', tabIndex: -1, className: styles_module_scss_2.default.loader, "data-size": size, "data-no-items": hasNoItems || undefined, "data-test-id": constants_1.TEST_IDS.loader, children: (0, jsx_runtime_1.jsx)(loader_1.Spinner, { size: constants_2.SPINNER_SIZE_MAP[size] }) })), [hasNoItems, loading, size]);
|
|
237
|
+
const content = (0, react_1.useMemo)(() => {
|
|
238
|
+
const itemsBody = virtualized ? ((0, jsx_runtime_1.jsx)("div", { className: styles_module_scss_2.default.virtualizedContainer, style: { height: virtualizer.getTotalSize() }, tabIndex: -1, children: virtualItems.map(virtualRow => ((0, jsx_runtime_1.jsx)("div", { "data-index": virtualRow.index, ref: virtualizer.measureElement, tabIndex: -1, className: styles_module_scss_2.default.virtualizedPositionBox, style: {
|
|
239
|
+
transform: `translateY(${virtualRow.start}px)`,
|
|
240
|
+
}, children: itemsJSX[virtualRow.index] }, virtualRow.key))) })) : (itemsJSX);
|
|
241
|
+
// Содержимое `DragOverlay`: копия строки (`SimpleItemOverlay`) либо заголовка группы
|
|
242
|
+
// (`SimpleGroupBlockOverlay`) — по типу активного элемента.
|
|
243
|
+
let dragOverlayContent = null;
|
|
244
|
+
if (activeOverlayItem && (0, Items_1.isSimpleItem)(activeOverlayItem)) {
|
|
245
|
+
dragOverlayContent = (0, jsx_runtime_1.jsx)(SimpleItem_1.SimpleItemOverlay, { ...activeOverlayItem });
|
|
246
|
+
}
|
|
247
|
+
else if (activeOverlayItem && (0, Items_1.isGroupItem)(activeOverlayItem)) {
|
|
248
|
+
const rows = (activeOverlayItem.allChildIds ?? [])
|
|
249
|
+
.map(rowId => flattenItems[rowId])
|
|
250
|
+
.filter((row) => (0, Items_1.isSimpleItem)(row));
|
|
251
|
+
dragOverlayContent = ((0, jsx_runtime_1.jsx)(SimpleItem_1.SimpleGroupBlockOverlay, { size: size, rows: rows, label: activeOverlayItem.label, beforeContent: activeOverlayItem.beforeContent, truncate: activeOverlayItem.truncate, divider: activeOverlayItem.divider, groupVariant: activeOverlayItem.groupVariant }));
|
|
252
|
+
}
|
|
253
|
+
// `SortableContext`/`DndContext` — чистые провайдеры контекста, не рендерят DOM-узлов,
|
|
254
|
+
// поэтому оборачивание всего блока (включая loader/empty-state) безопасно и не меняет
|
|
255
|
+
// разметку `<ul>`.
|
|
256
|
+
const body = onDragEnd ? ((0, jsx_runtime_1.jsxs)(core_1.DndContext, { sensors: sensors, collisionDetection: collisionDetection, measuring: measuringConfig, onDragStart: handleDragStart, onDragEnd: handleDragEnd, onDragCancel: handleDragCancel, children: [(0, jsx_runtime_1.jsx)(sortable_1.SortableContext, { items: sortableIds ?? [], strategy: sortable_1.verticalListSortingStrategy, children: itemsBody }), (0, utils_1.isBrowser)() &&
|
|
257
|
+
(0, react_dom_1.createPortal)((0, jsx_runtime_1.jsx)(core_1.DragOverlay, { dropAnimation: null, children: dragOverlayContent }), portalRoot.current ?? document.body)] })) : (itemsBody);
|
|
258
|
+
return ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [body, loadingJSX, (0, jsx_runtime_1.jsx)(helperComponents_1.ListEmptyState, { loading: loading, dataError: dataError, emptyStates: emptyStates, hasNoItems: hasNoItems, dataFiltered: dataFiltered ?? Boolean(search?.value), size: size })] }));
|
|
259
|
+
}, [
|
|
260
|
+
activeOverlayItem,
|
|
261
|
+
collisionDetection,
|
|
262
|
+
dataError,
|
|
263
|
+
dataFiltered,
|
|
264
|
+
emptyStates,
|
|
265
|
+
flattenItems,
|
|
266
|
+
handleDragCancel,
|
|
267
|
+
handleDragEnd,
|
|
268
|
+
handleDragStart,
|
|
269
|
+
hasNoItems,
|
|
270
|
+
itemsJSX,
|
|
271
|
+
loading,
|
|
272
|
+
loadingJSX,
|
|
273
|
+
onDragEnd,
|
|
274
|
+
portalRoot,
|
|
275
|
+
search?.value,
|
|
276
|
+
sensors,
|
|
277
|
+
size,
|
|
278
|
+
sortableIds,
|
|
279
|
+
virtualItems,
|
|
280
|
+
virtualized,
|
|
281
|
+
virtualizer,
|
|
282
|
+
]);
|
|
283
|
+
const onScrollInitialized = (0, react_1.useCallback)(() => {
|
|
284
|
+
// OverlayScrollbars инициализирован — ref указывает на viewport. Поднимаем флаг,
|
|
285
|
+
// чтобы виртуализатор перечитал scroll-элемент и сделал первый корректный замер.
|
|
286
|
+
setScrollElementReady(true);
|
|
287
|
+
if (!selectedItem) {
|
|
288
|
+
return;
|
|
289
|
+
}
|
|
290
|
+
centerItemInScrollContainer(innerScrollRef.current, selectedItem?.itemRef?.current ?? null);
|
|
291
|
+
}, [selectedItem]);
|
|
292
|
+
const listJSX = ((0, jsx_runtime_1.jsxs)("ul", { className: (0, classnames_1.default)(styles_module_scss_1.default.listContainer, className), ref: ref, onKeyDown: onKeyDown, tabIndex: tabIndex, onFocus: onFocus, onBlur: onBlur, "data-active": active || undefined, role: 'menu', ...(0, utils_1.extractSupportProps)(props), children: [header && ((0, jsx_runtime_1.jsx)("div", { className: styles_module_scss_2.default.header, "data-divider": headerDivider || undefined, onFocus: utils_2.stopPropagation, children: header })), (pinTopItemsPresent || search) && ((0, jsx_runtime_1.jsxs)(Items_1.PinTopGroupItem, { children: [search && (0, jsx_runtime_1.jsx)(Items_1.SearchItem, { search: search, ...searchItem }), pinTopItemsPresent && itemsPinTopJSX] })), scroll ? ((0, jsx_runtime_1.jsxs)(scroll_1.Scroll, { className: (0, classnames_1.default)({
|
|
293
|
+
[styles_module_scss_1.default.scrollContainerS]: scroll && limitedScrollHeight && size === 's',
|
|
294
|
+
[styles_module_scss_1.default.scrollContainerM]: scroll && limitedScrollHeight && size === 'm',
|
|
295
|
+
[styles_module_scss_1.default.scrollContainerL]: scroll && limitedScrollHeight && size === 'l',
|
|
296
|
+
}, scrollContainerClassName), barHideStrategy: barHideStrategy, size: 's', ref: (0, merge_refs_1.default)(innerScrollRef, scrollContainerRef), untouchableScrollbars: untouchableScrollbars, onScroll: onScroll, onInitialized: onScrollInitialized, children: [content, (0, jsx_runtime_1.jsx)("div", { className: styles_module_scss_2.default.scrollStub, ref: scrollRef })] })) : ((0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: content })), pinBottomItemsPresent && (0, jsx_runtime_1.jsx)(Items_1.PinBottomGroupItem, { children: itemsPinBottomJSX }), footer && ((0, jsx_runtime_1.jsx)("div", { className: styles_module_scss_2.default.footer, "data-divider": footerDivider || undefined, onFocus: utils_2.stopPropagation, children: footer }))] }));
|
|
297
|
+
if (!nested) {
|
|
298
|
+
return listJSX;
|
|
299
|
+
}
|
|
300
|
+
return ((0, jsx_runtime_1.jsx)("li", { className: styles_module_scss_2.default.nestedItem, role: 'menuitem', children: listJSX }));
|
|
301
|
+
});
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { SpinnerProps } from '@cloud-ru/ds-loader';
|
|
2
|
+
import { Size } from '../../../types';
|
|
3
|
+
export declare const LARGE_SIZE_HEIGHT = 40;
|
|
4
|
+
export declare const MEDIUM_SIZE_HEIGHT = 32;
|
|
5
|
+
export declare const SMALL_SIZE_HEIGHT = 24;
|
|
6
|
+
export declare const ALL_SIZES: Record<Size, number>;
|
|
7
|
+
export declare const SPINNER_SIZE_MAP: Record<Size, SpinnerProps['size']>;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SPINNER_SIZE_MAP = exports.ALL_SIZES = exports.SMALL_SIZE_HEIGHT = exports.MEDIUM_SIZE_HEIGHT = exports.LARGE_SIZE_HEIGHT = void 0;
|
|
4
|
+
// Фактические высоты однострочного item в compact-density (s=24 / m=32 / l=40). Оценка
|
|
5
|
+
// виртуализатора должна совпадать с рендером: завышенный estimate даёт «скачок» скролла —
|
|
6
|
+
// измеренные строки сжимают totalSize по мере прокрутки (MR!101).
|
|
7
|
+
exports.LARGE_SIZE_HEIGHT = 40;
|
|
8
|
+
exports.MEDIUM_SIZE_HEIGHT = 32;
|
|
9
|
+
exports.SMALL_SIZE_HEIGHT = 24;
|
|
10
|
+
exports.ALL_SIZES = {
|
|
11
|
+
m: exports.MEDIUM_SIZE_HEIGHT,
|
|
12
|
+
s: exports.SMALL_SIZE_HEIGHT,
|
|
13
|
+
l: exports.LARGE_SIZE_HEIGHT,
|
|
14
|
+
};
|
|
15
|
+
exports.SPINNER_SIZE_MAP = {
|
|
16
|
+
s: 'xs',
|
|
17
|
+
m: 'xs',
|
|
18
|
+
l: 's',
|
|
19
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './ListPrivate';
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./ListPrivate"), exports);
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
.loader{
|
|
2
|
+
display:flex;
|
|
3
|
+
align-items:center;
|
|
4
|
+
justify-content:center;
|
|
5
|
+
}
|
|
6
|
+
.loader[data-size=s]{
|
|
7
|
+
height:var(--sn-primitive-dimension-24, 24px);
|
|
8
|
+
}
|
|
9
|
+
.loader[data-size=s][data-no-items]{
|
|
10
|
+
min-width:calc(2 * 3 * var(--sn-primitive-dimension-24, 24px));
|
|
11
|
+
height:calc(3 * var(--sn-primitive-dimension-24, 24px));
|
|
12
|
+
}
|
|
13
|
+
.loader[data-size=m]{
|
|
14
|
+
height:var(--sn-primitive-dimension-32, 32px);
|
|
15
|
+
}
|
|
16
|
+
.loader[data-size=m][data-no-items]{
|
|
17
|
+
min-width:calc(2 * 3 * var(--sn-primitive-dimension-32, 32px));
|
|
18
|
+
height:calc(3 * var(--sn-primitive-dimension-32, 32px));
|
|
19
|
+
}
|
|
20
|
+
.loader[data-size=l]{
|
|
21
|
+
height:var(--sn-primitive-dimension-40, 40px);
|
|
22
|
+
}
|
|
23
|
+
.loader[data-size=l][data-no-items]{
|
|
24
|
+
min-width:calc(2 * 3 * var(--sn-primitive-dimension-40, 40px));
|
|
25
|
+
height:calc(3 * var(--sn-primitive-dimension-40, 40px));
|
|
26
|
+
}
|
|
27
|
+
.loader:focus-visible{
|
|
28
|
+
outline:var(--sn-theme-color-available-complementary, #000000) solid var(--sn-primitive-strokeWeight-strokeSemiBold, 2px);
|
|
29
|
+
outline-offset:calc(0px - var(--sn-primitive-strokeWeight-strokeSemiBold, 2px));
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
.scrollStub{
|
|
33
|
+
height:var(--sn-primitive-dimension-1, 1px);
|
|
34
|
+
margin-top:calc(0px - var(--sn-primitive-dimension-1, 1px));
|
|
35
|
+
background:transparent;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
.nestedItem{
|
|
39
|
+
list-style-type:none;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
.footer{
|
|
43
|
+
display:flex;
|
|
44
|
+
flex-direction:column;
|
|
45
|
+
box-sizing:border-box;
|
|
46
|
+
padding:var(--sn-popupPrivate-anatomy-dropdown-footer-paddingTop, var(--sn-primitive-dimension-8, 8px)) var(--sn-popupPrivate-anatomy-dropdown-footer-paddingHorizontal, var(--sn-primitive-dimension-8, 8px)) var(--sn-popupPrivate-anatomy-dropdown-footer-paddingBottom, var(--sn-primitive-dimension-4, 4px));
|
|
47
|
+
}
|
|
48
|
+
.footer[data-divider]{
|
|
49
|
+
border-top:var(--sn-primitive-strokeWeight-strokeRegular, 1px) solid var(--sn-theme-color-available-borderColor, var(--sn-brand-color-state-neutralBorder-forLightMode-default-borderColor, rgba(159, 166, 198, 0.3019607843)));
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
.header{
|
|
53
|
+
display:flex;
|
|
54
|
+
flex-direction:column;
|
|
55
|
+
gap:var(--sn-popupPrivate-anatomy-dropdown-header-headlineWrapper-gap, var(--sn-primitive-dimension-4, 4px));
|
|
56
|
+
box-sizing:border-box;
|
|
57
|
+
padding:0 var(--sn-popupPrivate-anatomy-dropdown-header-headlineWrapper-paddingHorizontal, var(--sn-primitive-dimension-8, 8px)) var(--sn-popupPrivate-anatomy-dropdown-header-gap, var(--sn-primitive-dimension-4, 4px));
|
|
58
|
+
}
|
|
59
|
+
.header[data-divider]{
|
|
60
|
+
margin-bottom:var(--sn-popupPrivate-anatomy-dropdown-header-gap, var(--sn-primitive-dimension-4, 4px));
|
|
61
|
+
padding-bottom:var(--sn-popupPrivate-anatomy-dropdown-header-headlineWrapper-paddingHorizontal, var(--sn-primitive-dimension-8, 8px));
|
|
62
|
+
border-bottom:var(--sn-primitive-strokeWeight-strokeRegular, 1px) solid var(--sn-theme-color-available-borderColor, var(--sn-brand-color-state-neutralBorder-forLightMode-default-borderColor, rgba(159, 166, 198, 0.3019607843)));
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
.content{
|
|
66
|
+
overflow:hidden;
|
|
67
|
+
flex-grow:1;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
.virtualizedContainer{
|
|
71
|
+
position:relative;
|
|
72
|
+
width:100%;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
.virtualizedPositionBox{
|
|
76
|
+
position:absolute;
|
|
77
|
+
top:0;
|
|
78
|
+
left:0;
|
|
79
|
+
width:100%;
|
|
80
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { ItemId } from '../../Items';
|
|
2
|
+
export type CollapseLevelContextType = {
|
|
3
|
+
level?: number;
|
|
4
|
+
};
|
|
5
|
+
export declare const CollapseLevelContext: import("react").Context<CollapseLevelContextType>;
|
|
6
|
+
export declare const useCollapseLevelContext: () => CollapseLevelContextType;
|
|
7
|
+
export type CollapseContextType = {
|
|
8
|
+
openCollapseItems?: ItemId[];
|
|
9
|
+
toggleOpenCollapseItem?(id: ItemId): void;
|
|
10
|
+
};
|
|
11
|
+
export declare const CollapseContext: import("react").Context<CollapseContextType>;
|
|
12
|
+
export declare const useCollapseContext: () => CollapseContextType;
|
|
13
|
+
export type CollapseState = {
|
|
14
|
+
value?: ItemId[];
|
|
15
|
+
onChange?(value?: ItemId[]): void;
|
|
16
|
+
defaultValue?: ItemId[];
|
|
17
|
+
};
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.useCollapseContext = exports.CollapseContext = exports.useCollapseLevelContext = exports.CollapseLevelContext = void 0;
|
|
4
|
+
const react_1 = require("react");
|
|
5
|
+
exports.CollapseLevelContext = (0, react_1.createContext)({});
|
|
6
|
+
const useCollapseLevelContext = () => (0, react_1.useContext)(exports.CollapseLevelContext);
|
|
7
|
+
exports.useCollapseLevelContext = useCollapseLevelContext;
|
|
8
|
+
exports.CollapseContext = (0, react_1.createContext)({});
|
|
9
|
+
const useCollapseContext = () => (0, react_1.useContext)(exports.CollapseContext);
|
|
10
|
+
exports.useCollapseContext = useCollapseContext;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { KeyboardEvent } from 'react';
|
|
2
|
+
import { ItemId } from '../../Items';
|
|
3
|
+
export type FocusListContextType = {
|
|
4
|
+
activeItemId?: ItemId;
|
|
5
|
+
forceUpdateActiveItemId?(itemId: ItemId): void;
|
|
6
|
+
handleListKeyDownFactory: (ids: ItemId[], expandedIds: ItemId[]) => (e: KeyboardEvent<HTMLElement>) => void;
|
|
7
|
+
};
|
|
8
|
+
export declare const FocusListContext: import("react").Context<FocusListContextType>;
|
|
9
|
+
export declare const useFocusListContext: () => FocusListContextType;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.useFocusListContext = exports.FocusListContext = void 0;
|
|
4
|
+
const react_1 = require("react");
|
|
5
|
+
exports.FocusListContext = (0, react_1.createContext)({
|
|
6
|
+
handleListKeyDownFactory: () => () => { },
|
|
7
|
+
});
|
|
8
|
+
const useFocusListContext = () => (0, react_1.useContext)(exports.FocusListContext);
|
|
9
|
+
exports.useFocusListContext = useFocusListContext;
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { ReactNode } from 'react';
|
|
2
|
+
import { ItemContentProps } from '../../../helperComponents';
|
|
3
|
+
import { Size } from '../../../types';
|
|
4
|
+
import { FlattenItem, FocusFlattenItem, ItemId } from '../../Items';
|
|
5
|
+
type ContentRenderProps = {
|
|
6
|
+
id?: ItemId;
|
|
7
|
+
content?: ItemContentProps | ReactNode;
|
|
8
|
+
disabled?: boolean;
|
|
9
|
+
};
|
|
10
|
+
export type PublicListContextType = {
|
|
11
|
+
/** Размер списка */
|
|
12
|
+
size?: Size;
|
|
13
|
+
/** Отображать ли маркер у выбранного элемента списка */
|
|
14
|
+
marker?: boolean;
|
|
15
|
+
/**
|
|
16
|
+
* Рендер функция основного контента айтема
|
|
17
|
+
*/
|
|
18
|
+
contentRender?(props: ContentRenderProps): ReactNode;
|
|
19
|
+
virtualized?: boolean;
|
|
20
|
+
};
|
|
21
|
+
export type PrivateListContextType = {
|
|
22
|
+
flattenItems: Record<string, FlattenItem>;
|
|
23
|
+
focusFlattenItems: Record<string, FocusFlattenItem>;
|
|
24
|
+
firstItemId?: ItemId;
|
|
25
|
+
};
|
|
26
|
+
type Child = {
|
|
27
|
+
children: ReactNode;
|
|
28
|
+
};
|
|
29
|
+
type ListContextType = PublicListContextType & PrivateListContextType;
|
|
30
|
+
export declare const ListContext: import("react").Context<ListContextType>;
|
|
31
|
+
export declare function useNewListContext(): ListContextType;
|
|
32
|
+
export declare function NewListContextProvider({ children, size, marker, flattenItems, focusFlattenItems, contentRender, firstItemId, virtualized, }: ListContextType & Child): import("react/jsx-runtime").JSX.Element;
|
|
33
|
+
export {};
|