@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,200 @@
|
|
|
1
|
+
import { DragEndEvent } from '@dnd-kit/core';
|
|
2
|
+
import { DropdownProps } from '@cloud-ru/ds-dropdown';
|
|
3
|
+
import { WithSupportProps } from '@cloud-ru/ds-utils';
|
|
4
|
+
import { FocusEvent, KeyboardEvent, ReactNode, RefObject } from 'react';
|
|
5
|
+
import { EmptyStateProps } from '../../helperComponents/index.js';
|
|
6
|
+
import { ScrollProps, SearchState } from '../../types.js';
|
|
7
|
+
import { FlattenBaseItem, Item, ItemId, ReorderItem } from '../Items/index.js';
|
|
8
|
+
import { CollapseState, PublicListContextType, SelectionState } from './contexts/index.js';
|
|
9
|
+
export type EmptyState = {
|
|
10
|
+
/** Текущий пустой список — результат поиска/фильтра: показывается `noResultsState` вместо `noDataState` */
|
|
11
|
+
dataFiltered?: boolean;
|
|
12
|
+
/** Загрузка данных завершилась ошибкой: показывается `errorDataState` */
|
|
13
|
+
dataError?: boolean;
|
|
14
|
+
/** Экран при отсутствии данных */
|
|
15
|
+
noDataState?: EmptyStateProps;
|
|
16
|
+
/** Экран при отсутствии результатов поиска или фильтров */
|
|
17
|
+
noResultsState?: EmptyStateProps;
|
|
18
|
+
/** Экран при ошибке запроса */
|
|
19
|
+
errorDataState?: EmptyStateProps;
|
|
20
|
+
};
|
|
21
|
+
type ListPropsCommon = WithSupportProps<{
|
|
22
|
+
/** Элементы списка, закрепленные сверху */
|
|
23
|
+
pinTop?: Item[];
|
|
24
|
+
/** Элементы списка, закрепленные снизу */
|
|
25
|
+
pinBottom?: Item[];
|
|
26
|
+
/**
|
|
27
|
+
* Кастомизируемый элемент в конце списка
|
|
28
|
+
* @type ReactNode;
|
|
29
|
+
*/
|
|
30
|
+
footer?: ReactNode;
|
|
31
|
+
/**
|
|
32
|
+
* Кастомизируемый элемент в начале списка — Figma `dropdownContainer.topBar`.
|
|
33
|
+
* Подходит для заголовка / справочного блока над поиском.
|
|
34
|
+
* @type ReactNode;
|
|
35
|
+
*/
|
|
36
|
+
header?: ReactNode;
|
|
37
|
+
/** Показывать divider между header и body (Figma `dropdownContainer.dividerWrapper` сверху) */
|
|
38
|
+
headerDivider?: boolean;
|
|
39
|
+
/** Показывать divider между body и footer (Figma `dropdownContainer.dividerWrapper` снизу) */
|
|
40
|
+
footerDivider?: boolean;
|
|
41
|
+
/** Список ссылок на кастомные элементы, помещенные в специальную секцию внизу списка */
|
|
42
|
+
footerActiveElementsRefs?: RefObject<HTMLElement>[];
|
|
43
|
+
/** Ссылка на управление навигацией листа с клавиатуры */
|
|
44
|
+
keyboardNavigationRef?: RefObject<{
|
|
45
|
+
focusItem(id: ItemId): void;
|
|
46
|
+
}>;
|
|
47
|
+
/** Настройки поисковой строки */
|
|
48
|
+
search?: SearchState;
|
|
49
|
+
/** `tabIndex` корневого элемента списка (для управления порядком фокуса) */
|
|
50
|
+
tabIndex?: number;
|
|
51
|
+
/** Настройки раскрытия элементов */
|
|
52
|
+
collapse?: CollapseState;
|
|
53
|
+
/** CSS-класс */
|
|
54
|
+
className?: string;
|
|
55
|
+
/** Флаг, отвечающий за состояние загрузки списка */
|
|
56
|
+
loading?: boolean;
|
|
57
|
+
/** Обработчик события по нажатию клавиш */
|
|
58
|
+
onKeyDown?(e: KeyboardEvent<HTMLElement>): void;
|
|
59
|
+
/** Флаг, отвечающий за включение самого родительского контейнера листа в цепочку фокусирующихся элементов */
|
|
60
|
+
hasListInFocusChain?: boolean;
|
|
61
|
+
/** Флаг, отвечающий за прокручивание до выбранного элемента */
|
|
62
|
+
scrollToSelectedItem?: boolean;
|
|
63
|
+
/** CSS-класс для scroll обертки основного списка айтемов */
|
|
64
|
+
scrollContainerClassName?: string;
|
|
65
|
+
/** Ограничить максимальную высоту скролл-контейнера в зависимости от `size` */
|
|
66
|
+
limitedScrollHeight?: boolean;
|
|
67
|
+
} & SelectionState & Omit<PublicListContextType, 'virtualized'> & ScrollProps & EmptyState>;
|
|
68
|
+
/** Props `List` — список обычных айтемов (все виды: base / collapse / group / next-list). */
|
|
69
|
+
export type ListProps = ListPropsCommon & {
|
|
70
|
+
/** Основные элементы списка */
|
|
71
|
+
items: Item[];
|
|
72
|
+
/** Включить виртуализацию элементов списка. Рекомендуется при количестве элементов от 1000. */
|
|
73
|
+
virtualized?: boolean;
|
|
74
|
+
};
|
|
75
|
+
/**
|
|
76
|
+
* Props `ReorderableList` — список с drag&drop-переупорядочиванием строк за ручку.
|
|
77
|
+
*
|
|
78
|
+
* Отдельный компонент, а не режим `List`: модель айтемов другая (`ReorderItem` — плоская строка
|
|
79
|
+
* либо группа с заголовком, без `collapse`/`next-list`/`group-select`), а виртуализация здесь
|
|
80
|
+
* невозможна в принципе — `@dnd-kit` и виртуализатор применяют к строке свой `transform`.
|
|
81
|
+
*/
|
|
82
|
+
export type ReorderableListProps = ListPropsCommon & {
|
|
83
|
+
/**
|
|
84
|
+
* Основные элементы списка: строки `SimpleItem` и/или группы с заголовком `SimpleGroupItem`
|
|
85
|
+
* (`type: 'group'` + `label` + сортируемые `items`).
|
|
86
|
+
*/
|
|
87
|
+
items: ReorderItem[];
|
|
88
|
+
/**
|
|
89
|
+
* Колбек по завершению drag&drop-переупорядочивания элементов списка. Список остаётся
|
|
90
|
+
* управляемым: сам не хранит порядок, а отдаёт наружу целиком обновлённое дерево `items` —
|
|
91
|
+
* потребитель обновляет свой стейт этим значением. Переупорядочивание работает только среди
|
|
92
|
+
* «братьев» одного уровня (строки без группы либо строки внутри одной группы; перенос между
|
|
93
|
+
* группами не поддерживается).
|
|
94
|
+
*/
|
|
95
|
+
onItemsReorder(items: ReorderItem[]): void;
|
|
96
|
+
};
|
|
97
|
+
/**
|
|
98
|
+
* @internal Props общей реализации `List`/`ReorderableList` — принимает обе модели айтемов сразу.
|
|
99
|
+
* Наружу не отдаётся: публичные `ListProps`/`ReorderableListProps` плоские, потому что union в
|
|
100
|
+
* публичном props-типе ломает `react-docgen-typescript` (`props.json` схлопывается в `alias`),
|
|
101
|
+
* вывод `Meta`/`StoryObj` и narrowing при spread'е.
|
|
102
|
+
*/
|
|
103
|
+
export type ListImplProps = ListPropsCommon & {
|
|
104
|
+
items: Item[] | ReorderItem[];
|
|
105
|
+
virtualized?: boolean;
|
|
106
|
+
onItemsReorder?(items: ReorderItem[]): void;
|
|
107
|
+
};
|
|
108
|
+
/** Собственные props дроплиста — всё, что не приходит из `List`. */
|
|
109
|
+
type DroplistOwnProps = {
|
|
110
|
+
/** Ссылка на элемент-триггер для дроплиста */
|
|
111
|
+
triggerElemRef?: RefObject<HTMLElement>;
|
|
112
|
+
/**
|
|
113
|
+
* Контейнер портала (ref). Переопределяет `PortalContext` для этого дроплиста
|
|
114
|
+
* (по аналогии с `container` у Modal/Drawer). По умолчанию — из `PortalContextProvider`.
|
|
115
|
+
*/
|
|
116
|
+
container?: RefObject<HTMLElement | null>;
|
|
117
|
+
/** Ссылка на элемент выпадающего списка */
|
|
118
|
+
listRef?: RefObject<HTMLElement>;
|
|
119
|
+
/**
|
|
120
|
+
* Закрывать выпадающий список после клика на базовый айтем.
|
|
121
|
+
*
|
|
122
|
+
* Работает в режимах selection: 'none' | 'single'
|
|
123
|
+
*
|
|
124
|
+
* @default false
|
|
125
|
+
*/
|
|
126
|
+
closeDroplistOnItemClick?: boolean;
|
|
127
|
+
/** Триггер для дроплиста
|
|
128
|
+
* @type ReactNode | ({onKeyDown}) => ReactNode
|
|
129
|
+
*
|
|
130
|
+
* Рендер функция принимает аргументы `onKeyDown` - хендлер ввода, для поддержки управления с клавиатуры
|
|
131
|
+
*/
|
|
132
|
+
children: ReactNode | ((params: {
|
|
133
|
+
onKeyDown?: (e: KeyboardEvent<HTMLElement>) => void;
|
|
134
|
+
}) => ReactNode);
|
|
135
|
+
} & Pick<DropdownProps, 'trigger' | 'placement' | 'widthStrategy' | 'open' | 'onOpenChange' | 'triggerClassName' | 'closeOnPopstate'>;
|
|
136
|
+
/** Props списка, которые дроплист пробрасывает в `List` (навигацией управляет он сам). */
|
|
137
|
+
type DroplistListProps<T> = Omit<T, 'tabIndex' | 'onKeyDown' | 'hasListInFocusChain' | 'keyboardNavigationRef'>;
|
|
138
|
+
/** Базовые props дроплиста: собственные + props обычного `List`. */
|
|
139
|
+
export type BaseDroplistProps = DroplistOwnProps & DroplistListProps<ListProps>;
|
|
140
|
+
/** Базовые props дроплиста с drag&drop-переупорядочиванием: собственные + props `ReorderableList`. */
|
|
141
|
+
export type ReorderableBaseDroplistProps = DroplistOwnProps & DroplistListProps<ReorderableListProps>;
|
|
142
|
+
/**
|
|
143
|
+
* @internal Props общей реализации дроплиста (`DesktopDroplist`/`MobileDroplist`) — принимает обе
|
|
144
|
+
* модели айтемов. Публичные `DroplistProps`/`ReorderableDroplistProps` плоские, см. `ListImplProps`.
|
|
145
|
+
*/
|
|
146
|
+
export type DesktopDroplistProps = DroplistOwnProps & DroplistListProps<ListImplProps>;
|
|
147
|
+
/** Только mobile (`BottomSheet`)-слоты адаптивного `Droplist`. */
|
|
148
|
+
type DroplistMobileSlots = {
|
|
149
|
+
/** Только mobile (`BottomSheet`): заголовок шапки. */
|
|
150
|
+
label?: string;
|
|
151
|
+
/** Только mobile (`BottomSheet`): action-кнопка справа в шапке. */
|
|
152
|
+
actionButton?: ReactNode;
|
|
153
|
+
/** Только mobile (`BottomSheet`): slot справа от заголовка. */
|
|
154
|
+
slotAfterTitle?: ReactNode;
|
|
155
|
+
/** Только mobile (`BottomSheet`): callback back-кнопки. */
|
|
156
|
+
onBackButtonClick?(): void;
|
|
157
|
+
};
|
|
158
|
+
/**
|
|
159
|
+
* Props адаптивного `Droplist` (дефолтный droplist): базовые props + mobile-слоты `BottomSheet`.
|
|
160
|
+
* Раскладку берёт из `AdaptiveProvider` (контекст): на `mobile` рендерит `MobileDroplist`
|
|
161
|
+
* (список size `l` в `BottomSheet`), иначе — `DesktopDroplist` (анкорный popover). Mobile-слоты
|
|
162
|
+
* применяются только на mobile.
|
|
163
|
+
*/
|
|
164
|
+
export type DroplistProps = BaseDroplistProps & DroplistMobileSlots;
|
|
165
|
+
/**
|
|
166
|
+
* Props адаптивного `ReorderableDroplist`: props `ReorderableList` + popover/mobile-обвязка
|
|
167
|
+
* `Droplist`. Отдельный компонент по той же причине, что и `ReorderableList`.
|
|
168
|
+
*/
|
|
169
|
+
export type ReorderableDroplistProps = ReorderableBaseDroplistProps & DroplistMobileSlots;
|
|
170
|
+
/** @internal Props общей реализации адаптивного дроплиста: реализация + mobile-слоты. */
|
|
171
|
+
export type DroplistImplProps = DesktopDroplistProps & DroplistMobileSlots;
|
|
172
|
+
/**
|
|
173
|
+
* @internal Props mobile-реализации (`BottomSheet`): реализация дроплиста без popover-пропов
|
|
174
|
+
* + mobile-слоты.
|
|
175
|
+
*/
|
|
176
|
+
export type MobileDroplistProps = Omit<DesktopDroplistProps, 'trigger' | 'placement' | 'widthStrategy' | 'triggerElemRef' | 'listRef' | 'triggerClassName'> & DroplistMobileSlots;
|
|
177
|
+
export type ListPrivateProps = Omit<ListImplProps, 'pinTop' | 'pinBottom' | 'items' | 'hasListInFocusChain' | 'onItemsReorder' | 'virtualized'> & {
|
|
178
|
+
nested?: boolean;
|
|
179
|
+
active?: boolean;
|
|
180
|
+
tabIndex?: number;
|
|
181
|
+
virtualized?: boolean;
|
|
182
|
+
onFocus?(e: FocusEvent<HTMLElement>): void;
|
|
183
|
+
onBlur?(e: FocusEvent<HTMLElement>): void;
|
|
184
|
+
onKeyDown?(e: KeyboardEvent<HTMLElement>): void;
|
|
185
|
+
limitedScrollHeight?: boolean;
|
|
186
|
+
searchItem?: FlattenBaseItem;
|
|
187
|
+
pinTop?: ItemId[];
|
|
188
|
+
items: ItemId[];
|
|
189
|
+
pinBottom?: ItemId[];
|
|
190
|
+
/**
|
|
191
|
+
* @internal Обработчик завершения drag&drop-переупорядочивания (см. публичный `onItemsReorder`
|
|
192
|
+
* у `List`/`Droplist`) — вычисляется в `useListItemsModel` и оперирует исходным (не плоским)
|
|
193
|
+
* деревом `items`. Наличие принудительно включает невиртуализированный рендер и оборачивает айтемы в
|
|
194
|
+
* `DndContext`/`SortableContext`.
|
|
195
|
+
*/
|
|
196
|
+
onDragEnd?(event: DragEndEvent): void;
|
|
197
|
+
/** @internal Плоский список id всех сортируемых элементов (все уровни) для `SortableContext` */
|
|
198
|
+
sortableIds?: ItemId[];
|
|
199
|
+
};
|
|
200
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { ItemId, ReorderItem } from '../Items/index.js';
|
|
2
|
+
/**
|
|
3
|
+
* Переупорядочивание reorder-дерева (`onItemsReorder`). Перестановка допускается только среди
|
|
4
|
+
* «братьев» одного уровня: сначала проверяется верхний уровень (строки без группы), затем — строки
|
|
5
|
+
* внутри каждой группы. Если `activeId` и `overId` лежат в разных контейнерах (в разных группах
|
|
6
|
+
* либо строка-vs-группа), дерево возвращается без изменений — перенос между группами не поддержан.
|
|
7
|
+
*/
|
|
8
|
+
export declare function reorderItems(items: ReorderItem[], activeId: ItemId, overId: ItemId): ReorderItem[];
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { arrayMove } from '@dnd-kit/sortable';
|
|
2
|
+
import { isGroupItem } from '../Items/index.js';
|
|
3
|
+
/**
|
|
4
|
+
* Переупорядочивание reorder-дерева (`onItemsReorder`). Перестановка допускается только среди
|
|
5
|
+
* «братьев» одного уровня: сначала проверяется верхний уровень (строки без группы), затем — строки
|
|
6
|
+
* внутри каждой группы. Если `activeId` и `overId` лежат в разных контейнерах (в разных группах
|
|
7
|
+
* либо строка-vs-группа), дерево возвращается без изменений — перенос между группами не поддержан.
|
|
8
|
+
*/
|
|
9
|
+
export function reorderItems(items, activeId, overId) {
|
|
10
|
+
// Верхний уровень: строки без группы и сами группы лежат здесь как «братья» — `id` обязателен у
|
|
11
|
+
// обеих сущностей, поэтому группа находится по нему наравне со строкой и переставляется целиком.
|
|
12
|
+
const topActiveIndex = items.findIndex(item => 'id' in item && item.id === activeId);
|
|
13
|
+
const topOverIndex = items.findIndex(item => 'id' in item && item.id === overId);
|
|
14
|
+
if (topActiveIndex !== -1 && topOverIndex !== -1) {
|
|
15
|
+
return arrayMove(items, topActiveIndex, topOverIndex);
|
|
16
|
+
}
|
|
17
|
+
// Иначе ищется группа, внутри которой обе строки — «братья», и перестановка идёт только там.
|
|
18
|
+
return items.map(item => {
|
|
19
|
+
if (isGroupItem(item)) {
|
|
20
|
+
const activeIndex = item.items.findIndex(child => child.id === activeId);
|
|
21
|
+
const overIndex = item.items.findIndex(child => child.id === overId);
|
|
22
|
+
if (activeIndex !== -1 && overIndex !== -1) {
|
|
23
|
+
return { ...item, items: arrayMove(item.items, activeIndex, overIndex) };
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
return item;
|
|
27
|
+
});
|
|
28
|
+
}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
export declare const ITEM_PREFIXES: {
|
|
2
|
+
readonly default: "~main";
|
|
3
|
+
readonly pinTop: "~pinTop";
|
|
4
|
+
readonly pinBottom: "~pinBottom";
|
|
5
|
+
readonly footer: "~footer";
|
|
6
|
+
readonly search: "~search";
|
|
7
|
+
readonly dropFocus: "~dropFocus";
|
|
8
|
+
};
|
|
9
|
+
export declare const SIZE: {
|
|
10
|
+
readonly S: "s";
|
|
11
|
+
readonly M: "m";
|
|
12
|
+
readonly L: "l";
|
|
13
|
+
};
|
|
14
|
+
export declare const DEFAULT_SIZE: "m";
|
|
15
|
+
export declare const MODE: {
|
|
16
|
+
readonly None: "none";
|
|
17
|
+
readonly Single: "single";
|
|
18
|
+
readonly Multiple: "multiple";
|
|
19
|
+
};
|
|
20
|
+
export declare const ITEM_TYPE: {
|
|
21
|
+
readonly NextList: "next-list";
|
|
22
|
+
readonly Collapse: "collapse";
|
|
23
|
+
readonly Group: "group";
|
|
24
|
+
readonly GroupSelect: "group-select";
|
|
25
|
+
readonly Simple: "simple";
|
|
26
|
+
};
|
|
27
|
+
export declare const TEST_IDS: {
|
|
28
|
+
readonly root: "list";
|
|
29
|
+
readonly loader: "list__loader";
|
|
30
|
+
readonly noData: "list__no-data";
|
|
31
|
+
readonly noResults: "list__no-results";
|
|
32
|
+
readonly error: "list__error";
|
|
33
|
+
readonly baseItem: "list__base-item";
|
|
34
|
+
readonly baseItemMarker: "list__base-item-marker";
|
|
35
|
+
readonly baseItemCheckbox: "list__base-item-checkbox";
|
|
36
|
+
readonly baseItemSwitch: "list__base-item-switch";
|
|
37
|
+
readonly baseItemLabel: "list__base-item-label";
|
|
38
|
+
readonly baseItemDescription: "list__base-item-description";
|
|
39
|
+
readonly searchItem: "list__search-item";
|
|
40
|
+
readonly bulkSelectButton: "list__bulk-select-button";
|
|
41
|
+
readonly pinTopGroupItem: "list__pin-top-group-item";
|
|
42
|
+
readonly pinBottomGroupItem: "list__pin-bottom-group-item";
|
|
43
|
+
readonly accordionItem: "list__accordion-item";
|
|
44
|
+
readonly groupIndicator: "list__group-indicator";
|
|
45
|
+
readonly dragHandle: "list__drag-handle";
|
|
46
|
+
readonly mobileDroplistRoot: "list__mobile-droplist-root";
|
|
47
|
+
readonly mobileDroplistTrigger: "list__mobile-droplist-trigger";
|
|
48
|
+
};
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
export const ITEM_PREFIXES = {
|
|
2
|
+
default: '~main',
|
|
3
|
+
pinTop: '~pinTop',
|
|
4
|
+
pinBottom: '~pinBottom',
|
|
5
|
+
footer: '~footer',
|
|
6
|
+
search: '~search',
|
|
7
|
+
dropFocus: '~dropFocus',
|
|
8
|
+
};
|
|
9
|
+
export const SIZE = {
|
|
10
|
+
S: 's',
|
|
11
|
+
M: 'm',
|
|
12
|
+
L: 'l',
|
|
13
|
+
};
|
|
14
|
+
export const DEFAULT_SIZE = SIZE.M;
|
|
15
|
+
export const MODE = {
|
|
16
|
+
None: 'none',
|
|
17
|
+
Single: 'single',
|
|
18
|
+
Multiple: 'multiple',
|
|
19
|
+
};
|
|
20
|
+
export const ITEM_TYPE = {
|
|
21
|
+
NextList: 'next-list',
|
|
22
|
+
Collapse: 'collapse',
|
|
23
|
+
Group: 'group',
|
|
24
|
+
GroupSelect: 'group-select',
|
|
25
|
+
Simple: 'simple',
|
|
26
|
+
};
|
|
27
|
+
export const TEST_IDS = {
|
|
28
|
+
root: 'list',
|
|
29
|
+
loader: 'list__loader',
|
|
30
|
+
noData: 'list__no-data',
|
|
31
|
+
noResults: 'list__no-results',
|
|
32
|
+
error: 'list__error',
|
|
33
|
+
baseItem: 'list__base-item',
|
|
34
|
+
baseItemMarker: 'list__base-item-marker',
|
|
35
|
+
baseItemCheckbox: 'list__base-item-checkbox',
|
|
36
|
+
baseItemSwitch: 'list__base-item-switch',
|
|
37
|
+
baseItemLabel: 'list__base-item-label',
|
|
38
|
+
baseItemDescription: 'list__base-item-description',
|
|
39
|
+
searchItem: 'list__search-item',
|
|
40
|
+
bulkSelectButton: 'list__bulk-select-button',
|
|
41
|
+
pinTopGroupItem: 'list__pin-top-group-item',
|
|
42
|
+
pinBottomGroupItem: 'list__pin-bottom-group-item',
|
|
43
|
+
accordionItem: 'list__accordion-item',
|
|
44
|
+
groupIndicator: 'list__group-indicator',
|
|
45
|
+
dragHandle: 'list__drag-handle',
|
|
46
|
+
mobileDroplistRoot: 'list__mobile-droplist-root',
|
|
47
|
+
mobileDroplistTrigger: 'list__mobile-droplist-trigger',
|
|
48
|
+
};
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { WithSupportProps } from '@cloud-ru/ds-utils';
|
|
2
|
+
import { ReactNode } from 'react';
|
|
3
|
+
export type CollapseBlockPrivateProps = WithSupportProps<{
|
|
4
|
+
children: ReactNode;
|
|
5
|
+
header: ReactNode;
|
|
6
|
+
expanded: boolean;
|
|
7
|
+
className?: string;
|
|
8
|
+
}>;
|
|
9
|
+
export declare function CollapseBlockPrivate({ children, expanded, className, header, ...rest }: CollapseBlockPrivateProps): import("react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { extractSupportProps } from '@cloud-ru/ds-utils';
|
|
3
|
+
import cn from 'classnames';
|
|
4
|
+
import styles from './styles.module.css';
|
|
5
|
+
// Раскрытие без анимации высоты: подход из Accordion/Tree (transition по max-height)
|
|
6
|
+
// не работает внутри Scroll-контейнера, поэтому контент монтируется/размонтируется напрямую.
|
|
7
|
+
export function CollapseBlockPrivate({ children, expanded, className, header, ...rest }) {
|
|
8
|
+
return (_jsxs("div", { className: cn(styles.accordion, className), role: 'menuitem', "aria-haspopup": true, "aria-expanded": expanded, ...extractSupportProps(rest), children: [header, _jsx("div", { className: styles.contentWrapper, "aria-hidden": !expanded, children: _jsx("div", { className: styles.content, children: expanded && children }) })] }));
|
|
9
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './CollapseBlockPrivate.js';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './CollapseBlockPrivate.js';
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
.accordion{
|
|
2
|
+
display:flex;
|
|
3
|
+
flex-direction:column;
|
|
4
|
+
box-sizing:border-box;
|
|
5
|
+
transition:gap 300ms;
|
|
6
|
+
}
|
|
7
|
+
.accordion::-webkit-scrollbar{
|
|
8
|
+
width:0;
|
|
9
|
+
}
|
|
10
|
+
.accordion[aria-expanded=false]{
|
|
11
|
+
gap:0;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
.content{
|
|
15
|
+
position:relative;
|
|
16
|
+
display:none;
|
|
17
|
+
box-sizing:border-box;
|
|
18
|
+
width:100%;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
.contentWrapper{
|
|
22
|
+
box-sizing:border-box;
|
|
23
|
+
width:100%;
|
|
24
|
+
}
|
|
25
|
+
.contentWrapper[aria-hidden=false] > .content{
|
|
26
|
+
display:block;
|
|
27
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { DesktopDroplistProps } from '../../components/Lists/types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Desktop-поверхность `Droplist`: анкорный popover (`Dropdown`) со списком. Internal — наружу
|
|
4
|
+
* не реэкспортится; рендерится адаптивным `Droplist` на не-mobile раскладке. Так как вызывается
|
|
5
|
+
* только на desktop-раскладке, внутренний адаптивный `Dropdown` всегда рендерит popover.
|
|
6
|
+
*/
|
|
7
|
+
export declare function DesktopDroplist({ items: itemsProp, search, pinBottom: pinBottomProp, pinTop: pinTopProp, footerActiveElementsRefs, children, trigger, placement, widthStrategy, triggerElemRef: triggerElemRefProp, container, open: openProp, onOpenChange, collapse, triggerClassName, selection, contentRender, size, marker, closeDroplistOnItemClick, className, listRef: listRefProp, untouchableScrollbars, virtualized, closeOnPopstate, header, headerDivider, footer, footerDivider, onItemsReorder, ...props }: DesktopDroplistProps): import("react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { Dropdown } from '@cloud-ru/ds-dropdown';
|
|
3
|
+
import { focusWithoutScroll, preventScrollOnVerticalArrows, useValueControl } from '@cloud-ru/ds-utils';
|
|
4
|
+
import cn from 'classnames';
|
|
5
|
+
import mergeRefs from 'merge-refs';
|
|
6
|
+
import { cloneElement, isValidElement, useCallback, useEffect, useMemo, useRef } from 'react';
|
|
7
|
+
import { SearchItem } from '../../components/Items/index.js';
|
|
8
|
+
import { CollapseContext, FocusListContext, NewListContextProvider, OpenListContext, SelectionProvider, } from '../../components/Lists/contexts/index.js';
|
|
9
|
+
import { DEFAULT_FALLBACK_PLACEMENTS, DEFAULT_SIZE, FOCUS_DEFERRAL_TIMEOUT, } from '../../components/Lists/Droplist/constants.js';
|
|
10
|
+
import { useListItemsModel, useNewKeyboardNavigation } from '../../components/Lists/hooks.js';
|
|
11
|
+
import { ListPrivate } from '../../components/Lists/ListPrivate/index.js';
|
|
12
|
+
import styles from '../../components/Lists/styles.module.css';
|
|
13
|
+
/**
|
|
14
|
+
* Desktop-поверхность `Droplist`: анкорный popover (`Dropdown`) со списком. Internal — наружу
|
|
15
|
+
* не реэкспортится; рендерится адаптивным `Droplist` на не-mobile раскладке. Так как вызывается
|
|
16
|
+
* только на desktop-раскладке, внутренний адаптивный `Dropdown` всегда рендерит popover.
|
|
17
|
+
*/
|
|
18
|
+
export function DesktopDroplist({ items: itemsProp, search, pinBottom: pinBottomProp = [], pinTop: pinTopProp = [], footerActiveElementsRefs, children, trigger, placement, widthStrategy, triggerElemRef: triggerElemRefProp, container, open: openProp, onOpenChange, collapse = {}, triggerClassName, selection, contentRender, size = DEFAULT_SIZE, marker = true, closeDroplistOnItemClick = false, className, listRef: listRefProp, untouchableScrollbars = false, virtualized = false, closeOnPopstate, header, headerDivider, footer, footerDivider, onItemsReorder, ...props }) {
|
|
19
|
+
const { hasSearch, openCollapseItems, toggleOpenCollapseItem, searchItem, flattenItems, focusFlattenItems, memorizedItems, ids, expandedIds, firstItemId, onDragEnd, sortableIds, } = 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 [open = false, setOpen] = useValueControl({
|
|
30
|
+
value: openProp,
|
|
31
|
+
defaultValue: false,
|
|
32
|
+
onChange: onOpenChange,
|
|
33
|
+
});
|
|
34
|
+
const triggerElemRef = useRef(null);
|
|
35
|
+
const listRef = useRef(null);
|
|
36
|
+
const { handleListKeyDownFactory, resetActiveItemId, activeItemId, forceUpdateActiveItemId } = useNewKeyboardNavigation({
|
|
37
|
+
mainRef: triggerElemRefProp ?? triggerElemRef,
|
|
38
|
+
focusFlattenItems,
|
|
39
|
+
hasListInFocusChain: true,
|
|
40
|
+
firstItemId,
|
|
41
|
+
});
|
|
42
|
+
const handleListKeyDown = useCallback((e) => handleListKeyDownFactory(ids, expandedIds)(e), [handleListKeyDownFactory, ids, expandedIds]);
|
|
43
|
+
// Закрытие по Escape должно вернуть фокус на триггер (a11y). Закрытие
|
|
44
|
+
// outside-click'ом фокус не отбирает (пользователь намеренно ушёл в другое место),
|
|
45
|
+
// поэтому различаем источник: флаг ставится Escape-обработчиком на контенте дроплиста.
|
|
46
|
+
const closedByKeyboardRef = useRef(false);
|
|
47
|
+
// Возврат фокуса откладывается на следующий тик (после размонтирования портала).
|
|
48
|
+
// Храним id таймера, чтобы отменить его при размонтировании компонента.
|
|
49
|
+
const focusTriggerTimerRef = useRef();
|
|
50
|
+
useEffect(() => () => {
|
|
51
|
+
clearTimeout(focusTriggerTimerRef.current);
|
|
52
|
+
}, []);
|
|
53
|
+
const handleOpenChange = useCallback((open) => {
|
|
54
|
+
resetActiveItemId();
|
|
55
|
+
if (!open && closedByKeyboardRef.current) {
|
|
56
|
+
const triggerEl = (triggerElemRefProp ?? triggerElemRef).current;
|
|
57
|
+
focusTriggerTimerRef.current = setTimeout(() => triggerEl?.focus(), FOCUS_DEFERRAL_TIMEOUT);
|
|
58
|
+
}
|
|
59
|
+
closedByKeyboardRef.current = false;
|
|
60
|
+
setOpen(open);
|
|
61
|
+
}, [resetActiveItemId, setOpen, triggerElemRefProp]);
|
|
62
|
+
const handleContentKeyDown = useCallback((e) => {
|
|
63
|
+
if (e.key === 'Escape') {
|
|
64
|
+
closedByKeyboardRef.current = true;
|
|
65
|
+
}
|
|
66
|
+
}, []);
|
|
67
|
+
const onKeyDown = useCallback((e, cb) => {
|
|
68
|
+
// Up/Down открывают/закрывают дроплист — гасим их нативный скролл страницы. Только
|
|
69
|
+
// вертикальные: триггером может быть текстовое поле, где Left/Right двигают каретку.
|
|
70
|
+
preventScrollOnVerticalArrows(e);
|
|
71
|
+
if (e.key === 'ArrowDown') {
|
|
72
|
+
setOpen(true);
|
|
73
|
+
focusTriggerTimerRef.current = setTimeout(() => {
|
|
74
|
+
resetActiveItemId();
|
|
75
|
+
focusWithoutScroll(listRef.current);
|
|
76
|
+
}, FOCUS_DEFERRAL_TIMEOUT);
|
|
77
|
+
}
|
|
78
|
+
if (e.key === 'ArrowUp') {
|
|
79
|
+
setOpen(false);
|
|
80
|
+
}
|
|
81
|
+
cb?.(e);
|
|
82
|
+
}, [resetActiveItemId, setOpen]);
|
|
83
|
+
const isValid = useMemo(() => isValidElement(children), [children]);
|
|
84
|
+
const triggerElem = useMemo(() => {
|
|
85
|
+
if (isValidElement(children)) {
|
|
86
|
+
const props = typeof children.props === 'object' ? children.props : {};
|
|
87
|
+
return cloneElement(children, {
|
|
88
|
+
...props,
|
|
89
|
+
onKeyDown: (e) => {
|
|
90
|
+
onKeyDown(e, children.props?.onKeyDown);
|
|
91
|
+
},
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
if (typeof children === 'function') {
|
|
95
|
+
return children({ onKeyDown });
|
|
96
|
+
}
|
|
97
|
+
return children;
|
|
98
|
+
}, [onKeyDown, children]);
|
|
99
|
+
// search и footer вынесены из `<ul>` в слоты шапки/футера dropdown. Т.к. их события
|
|
100
|
+
// клавиатуры больше не всплывают на `<ul>`-onKeyDown, навигацию по списку им отдаём
|
|
101
|
+
// явно через `handleListKeyDown` (тот же factory). Фокус-хэндофф идёт через общие
|
|
102
|
+
// refs (searchItem.itemRef / footerActiveElementsRefs), уже зарегистрированные в `ids`.
|
|
103
|
+
const searchNode = hasSearch ? (_jsx(SearchItem, { search: search, itemRef: searchItem.itemRef, inTopBar: true, onNavKeyDown: handleListKeyDown, onFocus: () => forceUpdateActiveItemId?.(searchItem.id) })) : undefined;
|
|
104
|
+
const footerNode = footer ? (
|
|
105
|
+
// eslint-disable-next-line jsx-a11y/no-static-element-interactions
|
|
106
|
+
_jsx("div", { onKeyDown: handleListKeyDown, children: footer })) : undefined;
|
|
107
|
+
const collapseContextValue = useMemo(() => ({ openCollapseItems, toggleOpenCollapseItem }), [openCollapseItems, toggleOpenCollapseItem]);
|
|
108
|
+
const focusListContextValue = useMemo(() => ({ activeItemId, handleListKeyDownFactory, forceUpdateActiveItemId }), [activeItemId, handleListKeyDownFactory, forceUpdateActiveItemId]);
|
|
109
|
+
const closeDroplist = useCallback(() => {
|
|
110
|
+
setOpen(false);
|
|
111
|
+
resetActiveItemId();
|
|
112
|
+
(triggerElemRefProp ?? triggerElemRef).current?.focus();
|
|
113
|
+
}, [setOpen, resetActiveItemId, triggerElemRefProp]);
|
|
114
|
+
const openListContextValue = useMemo(() => ({ closeDroplistOnItemClick, closeDroplist }), [closeDroplistOnItemClick, closeDroplist]);
|
|
115
|
+
// virtualized-список не имеет собственной ширины: строки `position:absolute; width:100%`,
|
|
116
|
+
// контейнер `width:100%` — под `auto` вся цепочка `100%` от «ничего» схлопывается в 0.
|
|
117
|
+
// Поэтому для virtualized и дефолт (`undefined`), и явный `auto` поднимаем до `gte`
|
|
118
|
+
// (ширина ≥ триггера). Узкую ширину такой список получает не через `auto`, а явным
|
|
119
|
+
// `width` (например, `dropDownClassName` у ChipChoice — сам он не virtualized).
|
|
120
|
+
const effectiveWidthStrategy = virtualized && (widthStrategy === undefined || widthStrategy === 'auto') ? 'gte' : widthStrategy;
|
|
121
|
+
return (_jsx(NewListContextProvider, { flattenItems: flattenItems, focusFlattenItems: focusFlattenItems, contentRender: contentRender, size: size, marker: marker, firstItemId: firstItemId, virtualized: virtualized, children: _jsx(SelectionProvider, { ...selection, children: _jsx(CollapseContext.Provider, { value: collapseContextValue, children: _jsx(FocusListContext.Provider, { value: focusListContextValue, children: _jsx(OpenListContext.Provider, { value: openListContextValue, children: _jsx(Dropdown, { content:
|
|
122
|
+
// onKeyDown — пассивный детектор Escape для возврата фокуса на триггер
|
|
123
|
+
// (см. handleContentKeyDown). Контейнер презентационный, не интерактивный.
|
|
124
|
+
// eslint-disable-next-line jsx-a11y/no-static-element-interactions
|
|
125
|
+
_jsx("div", { className: cn(styles.wrapper, className), onKeyDown: handleContentKeyDown, children: _jsx(ListPrivate, { ...props, items: memorizedItems.items.focusCloseChildIds, pinTop: memorizedItems.pinTop.focusCloseChildIds, pinBottom: memorizedItems.pinBottom.focusCloseChildIds, virtualized: virtualized, onKeyDown: handleListKeyDown, tabIndex: 0, ref: mergeRefs(listRef, listRefProp), dataFiltered: props.dataFiltered ?? Boolean(search?.value), onFocus: e => {
|
|
126
|
+
e.stopPropagation();
|
|
127
|
+
forceUpdateActiveItemId?.(ids[0]);
|
|
128
|
+
}, limitedScrollHeight: true, untouchableScrollbars: untouchableScrollbars, onDragEnd: onDragEnd, sortableIds: sortableIds }) }), bodyPadding: false, title: header,
|
|
129
|
+
// Divider под topBar рисуется, если явно запрошен header'ом либо когда в topBar
|
|
130
|
+
// есть поиск: строка поиска визуально отделяется от тела списка (как в PinTopGroupItem
|
|
131
|
+
// у inline-List). @cloud-ru/ds-dropdown рисует один divider на весь topBar (headline + search).
|
|
132
|
+
headerDivider: headerDivider || hasSearch, search: searchNode, footer: footerNode, footerDivider: footerDivider, container: container, outsideClick: true, triggerClassName: triggerClassName, fallbackPlacements: DEFAULT_FALLBACK_PLACEMENTS, trigger: trigger, placement: placement, widthStrategy: effectiveWidthStrategy, triggerRef: !triggerElemRefProp ? triggerElemRef : (isValid && triggerElemRefProp) || undefined, open: open, onOpenChange: handleOpenChange, closeOnPopstate: closeOnPopstate,
|
|
133
|
+
// dnd-kit (`MouseSensor`/`TouchSensor`) слушает `mouseup`/`touchend` на document
|
|
134
|
+
// в bubble-фазе — гашение этих хендлеров на floating ломает завершение drag.
|
|
135
|
+
stopPropagation: onItemsReorder ? { onMouseUp: false, onTouchEnd: false } : undefined, children: triggerElem }) }) }) }) }) }));
|
|
136
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './DesktopDroplist.js';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './DesktopDroplist.js';
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { RefObject } from 'react';
|
|
2
|
+
type HiddenTabButtonProps = {
|
|
3
|
+
listRef: RefObject<HTMLElement>;
|
|
4
|
+
tabIndex?: number;
|
|
5
|
+
};
|
|
6
|
+
export declare const HiddenTabButton: import("react").ForwardRefExoticComponent<HiddenTabButtonProps & import("react").RefAttributes<HTMLButtonElement>>;
|
|
7
|
+
export {};
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { forwardRef, useCallback } from 'react';
|
|
3
|
+
import { stopPropagation } from '../../utils.js';
|
|
4
|
+
import styles from './styles.module.css';
|
|
5
|
+
export const HiddenTabButton = forwardRef(({ listRef, tabIndex }, ref) => {
|
|
6
|
+
const handleFocus = useCallback((e) => {
|
|
7
|
+
if (e.relatedTarget !== listRef.current) {
|
|
8
|
+
listRef.current?.focus();
|
|
9
|
+
}
|
|
10
|
+
e.preventDefault();
|
|
11
|
+
e.stopPropagation();
|
|
12
|
+
}, [listRef]);
|
|
13
|
+
return (_jsx("button", { type: 'button', "aria-hidden": true, ref: ref, onKeyDown: stopPropagation, onFocus: handleFocus, className: styles.hiddenBtn, tabIndex: tabIndex }));
|
|
14
|
+
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './HiddenTabButton.js';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './HiddenTabButton.js';
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { TruncateStringProps } from '@cloud-ru/ds-truncate-string';
|
|
2
|
+
import { WithSupportProps } from '@cloud-ru/ds-utils';
|
|
3
|
+
type TruncateProps = {
|
|
4
|
+
label?: number;
|
|
5
|
+
description?: number;
|
|
6
|
+
variant?: TruncateStringProps['variant'];
|
|
7
|
+
};
|
|
8
|
+
export type ItemContentProps = WithSupportProps<{
|
|
9
|
+
label: string | number;
|
|
10
|
+
caption?: string;
|
|
11
|
+
description?: string;
|
|
12
|
+
truncate?: TruncateProps;
|
|
13
|
+
disabled?: boolean;
|
|
14
|
+
className?: string;
|
|
15
|
+
}>;
|
|
16
|
+
export declare function ItemContent({ truncate: truncateProp, caption, description, label, className, disabled, ...rest }: ItemContentProps): import("react/jsx-runtime").JSX.Element;
|
|
17
|
+
export {};
|