@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,52 @@
|
|
|
1
|
+
import { ItemContentProps } from '../../helperComponents/index.js';
|
|
2
|
+
import { AccordionItem, BaseItem, FlattenItem, FlattenSimpleItem, FocusFlattenItem, GroupItem, GroupSelectItem, Item, ItemId, NextListItem, ReorderItem, SimpleGroupItem, SimpleItem } from './types.js';
|
|
3
|
+
type FlattenableItem = Item | SimpleItem;
|
|
4
|
+
export declare function isBaseItem<ReturnType = BaseItem>(item: unknown): item is ReturnType;
|
|
5
|
+
export declare function isAccordionItem<ReturnType = AccordionItem>(item: unknown): item is ReturnType;
|
|
6
|
+
export declare function isNextListItem<ReturnType = NextListItem>(item: unknown): item is ReturnType;
|
|
7
|
+
export declare function isGroupItem<ReturnType = GroupItem>(item: unknown): item is ReturnType;
|
|
8
|
+
export declare function isGroupSelectItem<ReturnType = GroupSelectItem>(item: unknown): item is ReturnType;
|
|
9
|
+
export declare function isSimpleItem<ReturnType = FlattenSimpleItem>(item: unknown): item is ReturnType;
|
|
10
|
+
export declare function isReorderGroup(item: ReorderItem): item is SimpleGroupItem;
|
|
11
|
+
export declare function isReorderBaseItem(item: ReorderItem): item is SimpleItem;
|
|
12
|
+
export declare function isContentItem(item: unknown): item is ItemContentProps;
|
|
13
|
+
/**
|
|
14
|
+
* Примитивный `content` (строка/число) — это шорткат для `{ label: content }`:
|
|
15
|
+
* такой айтем рендерится через `ItemContent` и получает размерную высоту строки
|
|
16
|
+
* (`min-height` по `size`), а не схлопывается до высоты текста, как произвольный ReactNode.
|
|
17
|
+
*/
|
|
18
|
+
export declare function isPrimitiveContent(item: unknown): item is string | number;
|
|
19
|
+
export declare const isBaseItemProps: typeof isBaseItem;
|
|
20
|
+
export declare const isAccordionItemProps: typeof isAccordionItem;
|
|
21
|
+
export declare const isNextListItemProps: typeof isNextListItem;
|
|
22
|
+
export declare const isGroupItemProps: typeof isGroupItem;
|
|
23
|
+
export declare const isGroupSelectItemProps: typeof isGroupSelectItem;
|
|
24
|
+
type KindFlattenItemsProps = {
|
|
25
|
+
items: FlattenableItem[];
|
|
26
|
+
prefix?: ItemId;
|
|
27
|
+
parentId?: ItemId;
|
|
28
|
+
/**
|
|
29
|
+
* Дерево — `SimpleItem[]` в режиме drag&drop-переупорядочивания (`onItemsReorder`): каждый
|
|
30
|
+
* узел (лист и контейнер) размечается `type: ITEM_TYPE.Simple`, чтобы `getRenderItems` рендерил
|
|
31
|
+
* его через сортируемую обёртку, а `extractActiveItems` — считал всегда «развёрнутым».
|
|
32
|
+
*/
|
|
33
|
+
sortable?: boolean;
|
|
34
|
+
};
|
|
35
|
+
export declare function kindFlattenItems({ items, prefix, parentId, sortable }: KindFlattenItemsProps): {
|
|
36
|
+
focusCloseChildIds: ItemId[];
|
|
37
|
+
allChildIds: ItemId[];
|
|
38
|
+
flattenItems: Record<string, FlattenItem>;
|
|
39
|
+
focusFlattenItems: Record<string, FocusFlattenItem>;
|
|
40
|
+
};
|
|
41
|
+
type ExtractActiveItemsProps = {
|
|
42
|
+
focusFlattenItems: Record<string, FocusFlattenItem>;
|
|
43
|
+
focusCloseChildIds: ItemId[];
|
|
44
|
+
openCollapseItems: ItemId[];
|
|
45
|
+
isSelectionMultiple?: boolean;
|
|
46
|
+
};
|
|
47
|
+
type ExtractActiveItemsReturnType = {
|
|
48
|
+
ids: ItemId[];
|
|
49
|
+
expandedIds: ItemId[];
|
|
50
|
+
};
|
|
51
|
+
export declare function extractActiveItems({ focusFlattenItems, focusCloseChildIds, openCollapseItems, isSelectionMultiple, }: ExtractActiveItemsProps): ExtractActiveItemsReturnType;
|
|
52
|
+
export {};
|
|
@@ -0,0 +1,203 @@
|
|
|
1
|
+
import { createRef } from 'react';
|
|
2
|
+
import { ITEM_PREFIXES, ITEM_TYPE } from '../../constants.js';
|
|
3
|
+
import { getItemAutoId } from '../../utils.js';
|
|
4
|
+
function isRecord(item) {
|
|
5
|
+
return typeof item === 'object' && item !== null;
|
|
6
|
+
}
|
|
7
|
+
export function isBaseItem(item) {
|
|
8
|
+
return isRecord(item) && !('items' in item);
|
|
9
|
+
}
|
|
10
|
+
export function isAccordionItem(item) {
|
|
11
|
+
return isRecord(item) && 'items' in item && item['type'] === ITEM_TYPE.Collapse;
|
|
12
|
+
}
|
|
13
|
+
export function isNextListItem(item) {
|
|
14
|
+
return isRecord(item) && 'items' in item && item['type'] === ITEM_TYPE.NextList;
|
|
15
|
+
}
|
|
16
|
+
export function isGroupItem(item) {
|
|
17
|
+
return isRecord(item) && 'items' in item && item['type'] === ITEM_TYPE.Group;
|
|
18
|
+
}
|
|
19
|
+
export function isGroupSelectItem(item) {
|
|
20
|
+
return isRecord(item) && 'items' in item && item['type'] === ITEM_TYPE.GroupSelect;
|
|
21
|
+
}
|
|
22
|
+
// В отличие от остальных `is<Kind>Item`, не требует `'items' in item` — `Simple`-айтемы без
|
|
23
|
+
// вложенности (листья) тоже размечаются `type: ITEM_TYPE.Simple` в `kindFlattenItems`.
|
|
24
|
+
export function isSimpleItem(item) {
|
|
25
|
+
return isRecord(item) && item['type'] === ITEM_TYPE.Simple;
|
|
26
|
+
}
|
|
27
|
+
// Гарды для «сырого» дерева reorder-режима (payload `onItemsReorder`): группа `SimpleGroupItem`
|
|
28
|
+
// несёт `type: Group`, строка `SimpleItem` — без `type`. Отличаются от `isSimpleItem` (он смотрит
|
|
29
|
+
// `type: Simple`, проставляемый только при уплощении через `kindFlattenItems`), поэтому на payload'е
|
|
30
|
+
// `onItemsReorder` использовать нужно именно эти.
|
|
31
|
+
export function isReorderGroup(item) {
|
|
32
|
+
return 'type' in item && item.type === ITEM_TYPE.Group;
|
|
33
|
+
}
|
|
34
|
+
export function isReorderBaseItem(item) {
|
|
35
|
+
return !isReorderGroup(item);
|
|
36
|
+
}
|
|
37
|
+
export function isContentItem(item) {
|
|
38
|
+
return isRecord(item) && item['label'] !== undefined;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Примитивный `content` (строка/число) — это шорткат для `{ label: content }`:
|
|
42
|
+
* такой айтем рендерится через `ItemContent` и получает размерную высоту строки
|
|
43
|
+
* (`min-height` по `size`), а не схлопывается до высоты текста, как произвольный ReactNode.
|
|
44
|
+
*/
|
|
45
|
+
export function isPrimitiveContent(item) {
|
|
46
|
+
return typeof item === 'string' || typeof item === 'number';
|
|
47
|
+
}
|
|
48
|
+
// Публичные дискриминаторы пропсов айтемов (документированы в README, потребитель
|
|
49
|
+
// сужает union `Item` по типу). Внутри пакета используются короткие формы `isBaseItem`
|
|
50
|
+
// и т.д.; наружу отдаём `is<Kind>Props`, как в публичном API типов (`<Kind>Props`).
|
|
51
|
+
export const isBaseItemProps = isBaseItem;
|
|
52
|
+
export const isAccordionItemProps = isAccordionItem;
|
|
53
|
+
export const isNextListItemProps = isNextListItem;
|
|
54
|
+
export const isGroupItemProps = isGroupItem;
|
|
55
|
+
export const isGroupSelectItemProps = isGroupSelectItem;
|
|
56
|
+
export function kindFlattenItems({ items, prefix, parentId, sortable }) {
|
|
57
|
+
const flattenItems = {};
|
|
58
|
+
const focusFlattenItems = {};
|
|
59
|
+
function flatten({ item, idx, prefix, parentId = ITEM_PREFIXES.default }) {
|
|
60
|
+
const autoId = prefix !== undefined ? getItemAutoId(prefix, idx) : String(idx);
|
|
61
|
+
// В reorder-режиме (`sortable`) группа несёт собственный `id` (нужен `@dnd-kit` как identity
|
|
62
|
+
// для перестановки групп) — используется он. Обычная (не сортируемая) группа `id` не имеет — `autoId`.
|
|
63
|
+
const itemId = (isGroupItem(item) && !sortable ? undefined : item.id) ?? autoId;
|
|
64
|
+
if (isBaseItem(item)) {
|
|
65
|
+
// `type` добавляется в `flattenItems` только в `sortable`-режиме: другой код (например,
|
|
66
|
+
// `useGroupItemSelection`) отличает базовые айтемы от контейнерных через `!('type' in item)`,
|
|
67
|
+
// а не по значению — присутствие ключа `type: undefined` уже сломало бы эту проверку.
|
|
68
|
+
flattenItems[itemId] = {
|
|
69
|
+
...item,
|
|
70
|
+
items: [],
|
|
71
|
+
allChildIds: [],
|
|
72
|
+
id: itemId,
|
|
73
|
+
...(sortable ? { type: ITEM_TYPE.Simple } : {}),
|
|
74
|
+
};
|
|
75
|
+
focusFlattenItems[autoId] = {
|
|
76
|
+
// React key = `itemId`, не `autoId`. `autoId` — позиционный путь в focus-дереве
|
|
77
|
+
// (`default-0`, `default-1`, …): при `onItemsReorder` путь остаётся на месте, а данные
|
|
78
|
+
// под ним меняются. Ключ по позиции оставляет тот же инстанс (`Switch` и т.п.) в слоте
|
|
79
|
+
// и проигрывает transition на смене `checked` — `Switch` визуально «переезжает».
|
|
80
|
+
key: itemId,
|
|
81
|
+
originalId: itemId,
|
|
82
|
+
id: autoId,
|
|
83
|
+
// `inactive` элемент выпадает из клавиатурной навигации наравне с `disabled`
|
|
84
|
+
// (см. JSDoc `BaseItem.inactive`). Гейтит только nav/bulk-select через
|
|
85
|
+
// `extractActiveItems`; рендерный `disabled` в `flattenItems` остаётся исходным.
|
|
86
|
+
disabled: item.disabled || item.inactive,
|
|
87
|
+
parentId,
|
|
88
|
+
items: [],
|
|
89
|
+
allChildIds: [],
|
|
90
|
+
itemRef: item.itemRef || createRef(),
|
|
91
|
+
type: sortable ? ITEM_TYPE.Simple : undefined,
|
|
92
|
+
};
|
|
93
|
+
return { id: itemId, children: [itemId], autoId, focusChildren: [autoId] };
|
|
94
|
+
}
|
|
95
|
+
let allChildIds = [];
|
|
96
|
+
let allFocusChildIds = [];
|
|
97
|
+
const closeChildIds = [];
|
|
98
|
+
const autoChildIds = [];
|
|
99
|
+
const { items, ...rest } = item;
|
|
100
|
+
const childActiveParent = isGroupItem(item) ? (parentId ?? ITEM_PREFIXES.default) : autoId;
|
|
101
|
+
const filteredItems = items.filter(item => !item.hidden);
|
|
102
|
+
for (let idx = 0; idx < filteredItems.length; idx++) {
|
|
103
|
+
const { id, children, autoId, focusChildren } = flatten({
|
|
104
|
+
item: filteredItems[idx],
|
|
105
|
+
idx,
|
|
106
|
+
prefix: itemId,
|
|
107
|
+
parentId: childActiveParent,
|
|
108
|
+
});
|
|
109
|
+
autoChildIds.push(autoId);
|
|
110
|
+
closeChildIds.push(id);
|
|
111
|
+
allChildIds = allChildIds.concat(children);
|
|
112
|
+
allFocusChildIds = allFocusChildIds.concat(focusChildren);
|
|
113
|
+
}
|
|
114
|
+
const children = [...new Set(allChildIds.concat(closeChildIds))];
|
|
115
|
+
const focusChildren = [...new Set(allFocusChildIds.concat(autoChildIds))];
|
|
116
|
+
flattenItems[itemId] = {
|
|
117
|
+
...rest,
|
|
118
|
+
id: itemId,
|
|
119
|
+
items: [],
|
|
120
|
+
allChildIds: children,
|
|
121
|
+
};
|
|
122
|
+
// При `sortable` дерево в рантайме целиком `SimpleItem[]`, но статический тип этого не выражает
|
|
123
|
+
// (структурно совпадает с `BaseItem`) — отсюда каст к `SimpleItem` за `disabled`.
|
|
124
|
+
const containerDisabled = sortable
|
|
125
|
+
? item.disabled
|
|
126
|
+
: (item.type === ITEM_TYPE.Collapse || item.type === ITEM_TYPE.NextList) && item.disabled;
|
|
127
|
+
focusFlattenItems[autoId] = {
|
|
128
|
+
// См. комментарий у листового `key` выше — стабильная identity, не позиционный autoId.
|
|
129
|
+
key: autoId + '_' + itemId,
|
|
130
|
+
originalId: itemId,
|
|
131
|
+
id: autoId,
|
|
132
|
+
parentId,
|
|
133
|
+
items: autoChildIds,
|
|
134
|
+
allChildIds: focusChildren,
|
|
135
|
+
disabled: containerDisabled,
|
|
136
|
+
type: item.type,
|
|
137
|
+
itemRef: !isGroupItem(item) ? (item.itemRef ?? createRef()) : undefined,
|
|
138
|
+
};
|
|
139
|
+
return { id: itemId, children, autoId, focusChildren };
|
|
140
|
+
}
|
|
141
|
+
const closeChildIds = [];
|
|
142
|
+
const autoChildIds = [];
|
|
143
|
+
let allChildIds = [];
|
|
144
|
+
const filteredItems = items.filter(item => !item.hidden);
|
|
145
|
+
for (let idx = 0; idx < filteredItems.length; idx++) {
|
|
146
|
+
const { id, children, autoId } = flatten({ item: filteredItems[idx], idx, prefix, parentId });
|
|
147
|
+
autoChildIds.push(autoId);
|
|
148
|
+
closeChildIds.push(id);
|
|
149
|
+
allChildIds.push(id);
|
|
150
|
+
allChildIds = allChildIds.concat(children);
|
|
151
|
+
}
|
|
152
|
+
const children = [...new Set(allChildIds)];
|
|
153
|
+
return {
|
|
154
|
+
focusCloseChildIds: autoChildIds,
|
|
155
|
+
allChildIds: children,
|
|
156
|
+
flattenItems,
|
|
157
|
+
focusFlattenItems,
|
|
158
|
+
};
|
|
159
|
+
}
|
|
160
|
+
export function extractActiveItems({ focusFlattenItems, focusCloseChildIds, openCollapseItems, isSelectionMultiple, }) {
|
|
161
|
+
const ids = [];
|
|
162
|
+
const expandedIds = [];
|
|
163
|
+
function internalFn(focusCloseChildIds) {
|
|
164
|
+
focusCloseChildIds.forEach(id => {
|
|
165
|
+
const child = focusFlattenItems[id];
|
|
166
|
+
if (child.type === ITEM_TYPE.Group) {
|
|
167
|
+
internalFn(child.items);
|
|
168
|
+
return;
|
|
169
|
+
}
|
|
170
|
+
// `Simple` (drag&drop-переупорядочивание, `onItemsReorder`) не имеет collapse-состояния —
|
|
171
|
+
// строка всегда «развёрнута»: сама участвует в навигации (если не disabled) и рекурсия в
|
|
172
|
+
// детей идёт безусловно, в отличие от `Collapse`/`NextList` ниже (гейт `openCollapseItems`).
|
|
173
|
+
if (child.type === ITEM_TYPE.Simple) {
|
|
174
|
+
if (!child.disabled) {
|
|
175
|
+
ids.push(child.id);
|
|
176
|
+
internalFn(child.items);
|
|
177
|
+
}
|
|
178
|
+
return;
|
|
179
|
+
}
|
|
180
|
+
if (!child.disabled) {
|
|
181
|
+
if (child.type === ITEM_TYPE.GroupSelect) {
|
|
182
|
+
if (isSelectionMultiple) {
|
|
183
|
+
ids.push(child.id);
|
|
184
|
+
}
|
|
185
|
+
internalFn(child.items);
|
|
186
|
+
return;
|
|
187
|
+
}
|
|
188
|
+
ids.push(child.id);
|
|
189
|
+
if (child.type) {
|
|
190
|
+
expandedIds.push(id);
|
|
191
|
+
if (openCollapseItems.includes(child.originalId)) {
|
|
192
|
+
internalFn(child.items);
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
});
|
|
197
|
+
}
|
|
198
|
+
internalFn(focusCloseChildIds);
|
|
199
|
+
return {
|
|
200
|
+
ids,
|
|
201
|
+
expandedIds,
|
|
202
|
+
};
|
|
203
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { DroplistProps, ReorderableDroplistProps } from '../types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Адаптивный `Droplist`: раскладку берёт из `AdaptiveProvider` (контекст). На `mobile` рендерит
|
|
4
|
+
* список (size `l`) в `BottomSheet` (`MobileDroplist`), иначе — анкорный popover (`DesktopDroplist`).
|
|
5
|
+
* Слоты `label` / `actionButton` / `slotAfterTitle` / `onBackButtonClick` применяются только на mobile.
|
|
6
|
+
* Чтобы всегда был popover — `withLayoutType(Droplist, 'desktop')` либо вложенный
|
|
7
|
+
* `<AdaptiveProvider layoutType='desktop'>`. Пропа `layoutType` у компонента нет.
|
|
8
|
+
*/
|
|
9
|
+
export declare function Droplist(props: DroplistProps): import("react/jsx-runtime").JSX.Element;
|
|
10
|
+
export declare namespace Droplist {
|
|
11
|
+
var displayName: string;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Адаптивный `Droplist` с drag&drop-переупорядочиванием строк (см. `ReorderableList`): управляемый
|
|
15
|
+
* порядок через `onItemsReorder`, модель айтемов — `ReorderItem`, виртуализации нет. Раскладку и
|
|
16
|
+
* mobile-слоты берёт из `Droplist`.
|
|
17
|
+
*/
|
|
18
|
+
export declare function ReorderableDroplist(props: ReorderableDroplistProps): import("react/jsx-runtime").JSX.Element;
|
|
19
|
+
export declare namespace ReorderableDroplist {
|
|
20
|
+
var displayName: string;
|
|
21
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { isMobileLayout, useAdaptiveLayout } from '@cloud-ru/ds-adaptive';
|
|
3
|
+
import { DesktopDroplist } from '../../../helperComponents/DesktopDroplist/index.js';
|
|
4
|
+
import { MobileDroplist } from '../../../helperComponents/MobileDroplist/index.js';
|
|
5
|
+
/** @internal Общая реализация `Droplist`/`ReorderableDroplist`: свап поверхности по раскладке. */
|
|
6
|
+
function DroplistImpl({ children, size = 'm', label, actionButton, slotAfterTitle, onBackButtonClick, ...rest }) {
|
|
7
|
+
const { layoutType } = useAdaptiveLayout();
|
|
8
|
+
if (isMobileLayout(layoutType)) {
|
|
9
|
+
return (_jsx(MobileDroplist, { ...rest, label: label, actionButton: actionButton, slotAfterTitle: slotAfterTitle, onBackButtonClick: onBackButtonClick, children: children }));
|
|
10
|
+
}
|
|
11
|
+
return (_jsx(DesktopDroplist, { ...rest, size: size, children: children }));
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Адаптивный `Droplist`: раскладку берёт из `AdaptiveProvider` (контекст). На `mobile` рендерит
|
|
15
|
+
* список (size `l`) в `BottomSheet` (`MobileDroplist`), иначе — анкорный popover (`DesktopDroplist`).
|
|
16
|
+
* Слоты `label` / `actionButton` / `slotAfterTitle` / `onBackButtonClick` применяются только на mobile.
|
|
17
|
+
* Чтобы всегда был popover — `withLayoutType(Droplist, 'desktop')` либо вложенный
|
|
18
|
+
* `<AdaptiveProvider layoutType='desktop'>`. Пропа `layoutType` у компонента нет.
|
|
19
|
+
*/
|
|
20
|
+
export function Droplist(props) {
|
|
21
|
+
return _jsx(DroplistImpl, { ...props });
|
|
22
|
+
}
|
|
23
|
+
Droplist.displayName = 'Droplist';
|
|
24
|
+
/**
|
|
25
|
+
* Адаптивный `Droplist` с drag&drop-переупорядочиванием строк (см. `ReorderableList`): управляемый
|
|
26
|
+
* порядок через `onItemsReorder`, модель айтемов — `ReorderItem`, виртуализации нет. Раскладку и
|
|
27
|
+
* mobile-слоты берёт из `Droplist`.
|
|
28
|
+
*/
|
|
29
|
+
export function ReorderableDroplist(props) {
|
|
30
|
+
return _jsx(DroplistImpl, { ...props });
|
|
31
|
+
}
|
|
32
|
+
ReorderableDroplist.displayName = 'ReorderableDroplist';
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { DropdownProps } from '@cloud-ru/ds-dropdown';
|
|
2
|
+
export declare const DEFAULT_FALLBACK_PLACEMENTS: DropdownProps['fallbackPlacements'];
|
|
3
|
+
/**
|
|
4
|
+
* Возврат фокуса/фокусировка списка откладывается на следующий тик (0ms),
|
|
5
|
+
* чтобы дождаться размонтирования/монтирования портала дроплиста.
|
|
6
|
+
*/
|
|
7
|
+
export declare const FOCUS_DEFERRAL_TIMEOUT = 0;
|
|
8
|
+
export declare const DEFAULT_SIZE = "m";
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export const DEFAULT_FALLBACK_PLACEMENTS = ['top', 'right', 'bottom', 'left'];
|
|
2
|
+
/**
|
|
3
|
+
* Возврат фокуса/фокусировка списка откладывается на следующий тик (0ms),
|
|
4
|
+
* чтобы дождаться размонтирования/монтирования портала дроплиста.
|
|
5
|
+
*/
|
|
6
|
+
export const FOCUS_DEFERRAL_TIMEOUT = 0;
|
|
7
|
+
export const DEFAULT_SIZE = 'm';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './DropList.js';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './DropList.js';
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { KeyboardEvent } from 'react';
|
|
2
|
+
/** Список айтемов: base / collapse / group / next-list, с опциональной виртуализацией. */
|
|
3
|
+
export declare const List: import("react").ForwardRefExoticComponent<{
|
|
4
|
+
'data-test-id'?: string;
|
|
5
|
+
} & import("react").AriaAttributes & {
|
|
6
|
+
pinTop?: import("../..").Item[];
|
|
7
|
+
pinBottom?: import("../..").Item[];
|
|
8
|
+
footer?: import("react").ReactNode;
|
|
9
|
+
header?: import("react").ReactNode;
|
|
10
|
+
headerDivider?: boolean;
|
|
11
|
+
footerDivider?: boolean;
|
|
12
|
+
footerActiveElementsRefs?: import("react").RefObject<HTMLElement>[];
|
|
13
|
+
keyboardNavigationRef?: import("react").RefObject<{
|
|
14
|
+
focusItem(id: import("../..").ItemId): void;
|
|
15
|
+
}>;
|
|
16
|
+
search?: import("../../..").SearchState;
|
|
17
|
+
tabIndex?: number;
|
|
18
|
+
collapse?: import("..").CollapseState;
|
|
19
|
+
className?: string;
|
|
20
|
+
loading?: boolean;
|
|
21
|
+
onKeyDown?(e: KeyboardEvent<HTMLElement>): void;
|
|
22
|
+
hasListInFocusChain?: boolean;
|
|
23
|
+
scrollToSelectedItem?: boolean;
|
|
24
|
+
scrollContainerClassName?: string;
|
|
25
|
+
limitedScrollHeight?: boolean;
|
|
26
|
+
} & import("..").SelectionState & Omit<import("..").PublicListContextType, "virtualized"> & import("../../..").ScrollProps & import("..").EmptyState & {
|
|
27
|
+
items: import("../..").Item[];
|
|
28
|
+
virtualized?: boolean;
|
|
29
|
+
} & import("react").RefAttributes<HTMLElement>>;
|
|
30
|
+
/**
|
|
31
|
+
* Список с drag&drop-переупорядочиванием строк за ручку слева. Управляемый: порядок не хранит,
|
|
32
|
+
* а отдаёт обновлённое дерево в `onItemsReorder`. Модель айтемов — `ReorderItem` (плоская строка
|
|
33
|
+
* либо группа с заголовком); `collapse`/`next-list`/`group-select` и виртуализация не поддержаны.
|
|
34
|
+
*/
|
|
35
|
+
export declare const ReorderableList: import("react").ForwardRefExoticComponent<{
|
|
36
|
+
'data-test-id'?: string;
|
|
37
|
+
} & import("react").AriaAttributes & {
|
|
38
|
+
pinTop?: import("../..").Item[];
|
|
39
|
+
pinBottom?: import("../..").Item[];
|
|
40
|
+
footer?: import("react").ReactNode;
|
|
41
|
+
header?: import("react").ReactNode;
|
|
42
|
+
headerDivider?: boolean;
|
|
43
|
+
footerDivider?: boolean;
|
|
44
|
+
footerActiveElementsRefs?: import("react").RefObject<HTMLElement>[];
|
|
45
|
+
keyboardNavigationRef?: import("react").RefObject<{
|
|
46
|
+
focusItem(id: import("../..").ItemId): void;
|
|
47
|
+
}>;
|
|
48
|
+
search?: import("../../..").SearchState;
|
|
49
|
+
tabIndex?: number;
|
|
50
|
+
collapse?: import("..").CollapseState;
|
|
51
|
+
className?: string;
|
|
52
|
+
loading?: boolean;
|
|
53
|
+
onKeyDown?(e: KeyboardEvent<HTMLElement>): void;
|
|
54
|
+
hasListInFocusChain?: boolean;
|
|
55
|
+
scrollToSelectedItem?: boolean;
|
|
56
|
+
scrollContainerClassName?: string;
|
|
57
|
+
limitedScrollHeight?: boolean;
|
|
58
|
+
} & import("..").SelectionState & Omit<import("..").PublicListContextType, "virtualized"> & import("../../..").ScrollProps & import("..").EmptyState & {
|
|
59
|
+
items: import("../..").ReorderItem[];
|
|
60
|
+
onItemsReorder(items: import("../..").ReorderItem[]): void;
|
|
61
|
+
} & import("react").RefAttributes<HTMLElement>>;
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { isBrowser } from '@cloud-ru/ds-utils';
|
|
3
|
+
import cn from 'classnames';
|
|
4
|
+
import mergeRefs from 'merge-refs';
|
|
5
|
+
import { forwardRef, useCallback, useMemo, useRef } from 'react';
|
|
6
|
+
import { DEFAULT_SIZE } from '../../../constants.js';
|
|
7
|
+
import { HiddenTabButton } from '../../../helperComponents/index.js';
|
|
8
|
+
import { CollapseContext, FocusListContext, NewListContextProvider, SelectionProvider } from '../contexts/index.js';
|
|
9
|
+
import { useListItemsModel, useNewKeyboardNavigation } from '../hooks.js';
|
|
10
|
+
import { ListPrivate } from '../ListPrivate/index.js';
|
|
11
|
+
import styles from '../styles.module.css';
|
|
12
|
+
const ListImpl = forwardRef(({ items: itemsProp = [], search, pinBottom: pinBottomProp = [], pinTop: pinTopProp = [], footerActiveElementsRefs, onKeyDown, tabIndex = 0, className, collapse = {}, selection, contentRender, size = DEFAULT_SIZE, marker = true, keyboardNavigationRef, hasListInFocusChain = true, onItemsReorder, ...props }, ref) => {
|
|
13
|
+
const { openCollapseItems, toggleOpenCollapseItem, searchItem, flattenItems, focusFlattenItems, memorizedItems, ids, expandedIds, firstItemId, onDragEnd, sortableIds, } = useListItemsModel({
|
|
14
|
+
items: itemsProp,
|
|
15
|
+
pinTop: pinTopProp,
|
|
16
|
+
pinBottom: pinBottomProp,
|
|
17
|
+
search,
|
|
18
|
+
collapse,
|
|
19
|
+
selectionMode: selection?.mode,
|
|
20
|
+
footerActiveElementsRefs,
|
|
21
|
+
onItemsReorder,
|
|
22
|
+
});
|
|
23
|
+
const listRef = useRef(null);
|
|
24
|
+
const btnRef = useRef(null);
|
|
25
|
+
const { handleListKeyDownFactory, activeItemId, resetActiveItemId, forceUpdateActiveItemId } = useNewKeyboardNavigation({
|
|
26
|
+
mainRef: listRef,
|
|
27
|
+
btnRef,
|
|
28
|
+
focusFlattenItems,
|
|
29
|
+
keyboardNavigationRef,
|
|
30
|
+
hasListInFocusChain,
|
|
31
|
+
firstItemId,
|
|
32
|
+
});
|
|
33
|
+
const handleListKeyDown = useCallback((e) => handleListKeyDownFactory(ids, expandedIds)(e), [handleListKeyDownFactory, ids, expandedIds]);
|
|
34
|
+
const isActive = isBrowser() && listRef.current === document.activeElement && activeItemId === undefined;
|
|
35
|
+
const mergedHandlerKeyDown = (e) => {
|
|
36
|
+
onKeyDown?.(e);
|
|
37
|
+
handleListKeyDown?.(e);
|
|
38
|
+
};
|
|
39
|
+
const handleOnFocus = () => {
|
|
40
|
+
resetActiveItemId();
|
|
41
|
+
};
|
|
42
|
+
const collapseContextValue = useMemo(() => ({ openCollapseItems, toggleOpenCollapseItem }), [openCollapseItems, toggleOpenCollapseItem]);
|
|
43
|
+
const focusListContextValue = useMemo(() => ({ activeItemId, handleListKeyDownFactory, forceUpdateActiveItemId }), [activeItemId, handleListKeyDownFactory, forceUpdateActiveItemId]);
|
|
44
|
+
return (_jsx(NewListContextProvider, { flattenItems: flattenItems, focusFlattenItems: focusFlattenItems, contentRender: contentRender, size: size, marker: marker, firstItemId: firstItemId, virtualized: props.virtualized, children: _jsx(SelectionProvider, { ...selection, children: _jsx(CollapseContext.Provider, { value: collapseContextValue, children: _jsx(FocusListContext.Provider, { value: focusListContextValue, children: _jsxs("div", { className: cn(styles.wrapper, className), "data-active": isActive || undefined, children: [_jsx(ListPrivate, { ...props, items: memorizedItems.items.focusCloseChildIds, pinTop: memorizedItems.pinTop.focusCloseChildIds, pinBottom: memorizedItems.pinBottom.focusCloseChildIds, searchItem: searchItem, ref: mergeRefs(ref, listRef), onFocus: handleOnFocus, onKeyDown: mergedHandlerKeyDown, tabIndex: hasListInFocusChain ? tabIndex : undefined, search: search, nested: false, onDragEnd: onDragEnd, sortableIds: sortableIds }), hasListInFocusChain && _jsx(HiddenTabButton, { ref: btnRef, listRef: listRef, tabIndex: tabIndex })] }) }) }) }) }));
|
|
45
|
+
});
|
|
46
|
+
ListImpl.displayName = 'ListImpl';
|
|
47
|
+
/** Список айтемов: base / collapse / group / next-list, с опциональной виртуализацией. */
|
|
48
|
+
export const List = forwardRef((props, ref) => _jsx(ListImpl, { ...props, ref: ref }));
|
|
49
|
+
List.displayName = 'List';
|
|
50
|
+
/**
|
|
51
|
+
* Список с drag&drop-переупорядочиванием строк за ручку слева. Управляемый: порядок не хранит,
|
|
52
|
+
* а отдаёт обновлённое дерево в `onItemsReorder`. Модель айтемов — `ReorderItem` (плоская строка
|
|
53
|
+
* либо группа с заголовком); `collapse`/`next-list`/`group-select` и виртуализация не поддержаны.
|
|
54
|
+
*/
|
|
55
|
+
export const ReorderableList = forwardRef((props, ref) => (_jsx(ListImpl, { ...props, ref: ref })));
|
|
56
|
+
ReorderableList.displayName = 'ReorderableList';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './List.js';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './List.js';
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { DragEndEvent } from '@dnd-kit/core';
|
|
2
|
+
import { ItemId } from '../../Items/index.js';
|
|
3
|
+
export declare const ListPrivate: import("react").ForwardRefExoticComponent<Omit<import("..").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("../..").FlattenBaseItem;
|
|
13
|
+
pinTop?: ItemId[];
|
|
14
|
+
items: ItemId[];
|
|
15
|
+
pinBottom?: ItemId[];
|
|
16
|
+
onDragEnd?(event: DragEndEvent): void;
|
|
17
|
+
sortableIds?: ItemId[];
|
|
18
|
+
} & import("react").RefAttributes<HTMLElement>>;
|