@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
package/package.json
ADDED
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@cloud-ru/ds-list",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "Списочный UI — компонент List для плоских/вложенных списков с выбором, группами и поиском и Droplist — тот же список в поповере.",
|
|
5
|
+
"repository": {
|
|
6
|
+
"type": "git",
|
|
7
|
+
"url": "git+https://github.com/cloud-ru-tech/snack-v2.git",
|
|
8
|
+
"directory": "packages/list"
|
|
9
|
+
},
|
|
10
|
+
"homepage": "https://github.com/cloud-ru-tech/snack-v2/tree/master/packages/list",
|
|
11
|
+
"license": "Apache-2.0",
|
|
12
|
+
"author": "Nikita Ershov <niershov@cloud.ru>",
|
|
13
|
+
"type": "module",
|
|
14
|
+
"main": "./dist/cjs/index.js",
|
|
15
|
+
"module": "./dist/esm/index.js",
|
|
16
|
+
"types": "./dist/esm/index.d.ts",
|
|
17
|
+
"exports": {
|
|
18
|
+
".": {
|
|
19
|
+
"source": "./src/index.ts",
|
|
20
|
+
"types": "./dist/esm/index.d.ts",
|
|
21
|
+
"import": "./dist/esm/index.js",
|
|
22
|
+
"require": "./dist/cjs/index.js"
|
|
23
|
+
},
|
|
24
|
+
"./locale": {
|
|
25
|
+
"source": "./src/locale/index.ts",
|
|
26
|
+
"types": "./dist/esm/locale/index.d.ts",
|
|
27
|
+
"import": "./dist/esm/locale/index.js",
|
|
28
|
+
"require": "./dist/cjs/locale/index.js"
|
|
29
|
+
}
|
|
30
|
+
},
|
|
31
|
+
"files": [
|
|
32
|
+
"dist",
|
|
33
|
+
"src",
|
|
34
|
+
"./CHANGELOG.md",
|
|
35
|
+
"./LICENSE"
|
|
36
|
+
],
|
|
37
|
+
"sideEffects": [
|
|
38
|
+
"*.css",
|
|
39
|
+
"**/*.css"
|
|
40
|
+
],
|
|
41
|
+
"publishConfig": {
|
|
42
|
+
"access": "public"
|
|
43
|
+
},
|
|
44
|
+
"dependencies": {
|
|
45
|
+
"@dnd-kit/core": "^6.3.1",
|
|
46
|
+
"@dnd-kit/sortable": "^10.0.0",
|
|
47
|
+
"@dnd-kit/utilities": "^3.2.2",
|
|
48
|
+
"@tanstack/react-virtual": "^3.14.8",
|
|
49
|
+
"classnames": "^2.5.1",
|
|
50
|
+
"merge-refs": "^2.0.0",
|
|
51
|
+
"@cloud-ru/ds-adaptive": "^1.0.0",
|
|
52
|
+
"@cloud-ru/ds-bottom-sheet": "^1.0.0",
|
|
53
|
+
"@cloud-ru/ds-button": "^1.0.0",
|
|
54
|
+
"@cloud-ru/ds-divider": "^1.0.0",
|
|
55
|
+
"@cloud-ru/ds-dropdown": "^1.0.0",
|
|
56
|
+
"@cloud-ru/ds-icons": "^1.0.0",
|
|
57
|
+
"@cloud-ru/ds-info-block": "^1.0.0",
|
|
58
|
+
"@cloud-ru/ds-loader": "^1.0.0",
|
|
59
|
+
"@cloud-ru/ds-materials": "^1.0.0",
|
|
60
|
+
"@cloud-ru/ds-portal-context": "^1.0.0",
|
|
61
|
+
"@cloud-ru/ds-scroll": "^1.0.0",
|
|
62
|
+
"@cloud-ru/ds-toggles": "^1.0.0",
|
|
63
|
+
"@cloud-ru/ds-search-private": "^1.0.0",
|
|
64
|
+
"@cloud-ru/ds-truncate-string": "^1.0.0",
|
|
65
|
+
"@cloud-ru/ds-utils": "^1.0.0"
|
|
66
|
+
},
|
|
67
|
+
"peerDependencies": {
|
|
68
|
+
"@cloud-ru/ds-locale": "^1.0.0"
|
|
69
|
+
}
|
|
70
|
+
}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { ChevronDownSVG, ChevronUpSVG } from '@cloud-ru/ds-icons/interface/system';
|
|
2
|
+
import { useCallback } from 'react';
|
|
3
|
+
|
|
4
|
+
import { TEST_IDS } from '../../../constants';
|
|
5
|
+
import { CollapseBlockPrivate } from '../../../helperComponents';
|
|
6
|
+
import {
|
|
7
|
+
CollapseLevelContext,
|
|
8
|
+
useCollapseContext,
|
|
9
|
+
useCollapseLevelContext,
|
|
10
|
+
useSelectionContext,
|
|
11
|
+
} from '../../Lists/contexts';
|
|
12
|
+
import { BaseItem } from '../BaseItem';
|
|
13
|
+
import { useGroupItemSelection, useRenderItems } from '../hooks';
|
|
14
|
+
import { CommonFlattenProps, FlattenAccordionItem } from '../types';
|
|
15
|
+
|
|
16
|
+
type AccordionItemProps = Omit<FlattenAccordionItem, 'type'> & CommonFlattenProps;
|
|
17
|
+
|
|
18
|
+
export function AccordionItem({ id, disabled, allChildIds, items, ...option }: AccordionItemProps) {
|
|
19
|
+
const { level = 0 } = useCollapseLevelContext();
|
|
20
|
+
const { openCollapseItems = [], toggleOpenCollapseItem } = useCollapseContext();
|
|
21
|
+
|
|
22
|
+
const { value, isSelectionSingle, isSelectionMultiple } = useSelectionContext();
|
|
23
|
+
|
|
24
|
+
const {
|
|
25
|
+
indeterminate,
|
|
26
|
+
handleOnSelect,
|
|
27
|
+
checked: checkedProp,
|
|
28
|
+
} = useGroupItemSelection({
|
|
29
|
+
items,
|
|
30
|
+
id,
|
|
31
|
+
disabled,
|
|
32
|
+
allChildIds,
|
|
33
|
+
});
|
|
34
|
+
|
|
35
|
+
const isOpen = Boolean(openCollapseItems.includes(id ?? ''));
|
|
36
|
+
|
|
37
|
+
const checked = Boolean(
|
|
38
|
+
(indeterminate && !isOpen && isSelectionSingle && value && allChildIds.includes(value)) ||
|
|
39
|
+
(isSelectionMultiple && checkedProp),
|
|
40
|
+
);
|
|
41
|
+
|
|
42
|
+
const handleKeyDown = useCallback(() => {
|
|
43
|
+
toggleOpenCollapseItem?.(id ?? '');
|
|
44
|
+
}, [id, toggleOpenCollapseItem]);
|
|
45
|
+
|
|
46
|
+
const itemsJSX = useRenderItems(items);
|
|
47
|
+
|
|
48
|
+
// Раскрытие привязано к явной кнопке-триггеру `groupIndicator` (шеврон справа) и
|
|
49
|
+
// ТОЛЬКО переключает collapse — `option.onClick` сюда не зовём, иначе у потребителя,
|
|
50
|
+
// который вешает на onClick собственный toggle, выходит двойное переключение.
|
|
51
|
+
// Клик по телу строки (выбор/навигация) идёт через `option.onClick` в BaseItem.
|
|
52
|
+
const handleExpandIconClick = () => {
|
|
53
|
+
toggleOpenCollapseItem?.(id ?? '');
|
|
54
|
+
};
|
|
55
|
+
|
|
56
|
+
return (
|
|
57
|
+
<CollapseBlockPrivate
|
|
58
|
+
header={
|
|
59
|
+
<BaseItem
|
|
60
|
+
{...option}
|
|
61
|
+
id={id}
|
|
62
|
+
disabled={disabled}
|
|
63
|
+
open={isOpen}
|
|
64
|
+
expandIcon={isOpen ? <ChevronUpSVG /> : <ChevronDownSVG />}
|
|
65
|
+
onExpandIconClick={handleExpandIconClick}
|
|
66
|
+
isParentNode
|
|
67
|
+
onOpenNestedList={handleKeyDown}
|
|
68
|
+
checked={checked}
|
|
69
|
+
indeterminate={indeterminate}
|
|
70
|
+
onSelect={!disabled ? handleOnSelect : undefined}
|
|
71
|
+
/>
|
|
72
|
+
}
|
|
73
|
+
expanded={isOpen}
|
|
74
|
+
data-test-id={`${TEST_IDS.accordionItem}-${id}`}
|
|
75
|
+
>
|
|
76
|
+
<CollapseLevelContext.Provider value={{ level: level + 1 }}>{itemsJSX}</CollapseLevelContext.Provider>
|
|
77
|
+
</CollapseBlockPrivate>
|
|
78
|
+
);
|
|
79
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './AccordionItem';
|
|
@@ -0,0 +1,274 @@
|
|
|
1
|
+
import { Checkbox, Switch } from '@cloud-ru/ds-toggles';
|
|
2
|
+
import { extractSupportProps } from '@cloud-ru/ds-utils';
|
|
3
|
+
import cn from 'classnames';
|
|
4
|
+
import { FocusEvent, KeyboardEvent, MouseEvent, ReactNode, RefObject } from 'react';
|
|
5
|
+
|
|
6
|
+
import { DEFAULT_SIZE, TEST_IDS } from '../../../constants';
|
|
7
|
+
import { ItemContent } from '../../../helperComponents';
|
|
8
|
+
import {
|
|
9
|
+
useCollapseLevelContext,
|
|
10
|
+
useNewListContext,
|
|
11
|
+
useOpenListContext,
|
|
12
|
+
useSelectionContext,
|
|
13
|
+
} from '../../Lists/contexts';
|
|
14
|
+
import commonStyles from '../styles.module.scss';
|
|
15
|
+
import { FlattenBaseItem } from '../types';
|
|
16
|
+
import { isContentItem, isPrimitiveContent } from '../utils';
|
|
17
|
+
import { TOGGLE_SIZE_MAP } from './constants';
|
|
18
|
+
import styles from './styles.module.scss';
|
|
19
|
+
|
|
20
|
+
type AllBaseItemProps = FlattenBaseItem & {
|
|
21
|
+
expandIcon?: ReactNode;
|
|
22
|
+
open?: boolean;
|
|
23
|
+
indeterminate?: boolean;
|
|
24
|
+
onSelect?(): void;
|
|
25
|
+
isParentNode?: boolean;
|
|
26
|
+
onOpenNestedList?(e?: KeyboardEvent<HTMLElement>): void;
|
|
27
|
+
/**
|
|
28
|
+
* Клик по явной кнопке-триггеру `groupIndicator` (шеврон справа), открывающей/закрывающей
|
|
29
|
+
* вложенный список. Если передан — шеврон рендерится как отдельная интерактивная кнопка
|
|
30
|
+
* со своим state-layer'ом, а клик по телу строки больше не переключает раскрытие.
|
|
31
|
+
*/
|
|
32
|
+
onExpandIconClick?(e: MouseEvent<HTMLElement>): void;
|
|
33
|
+
/**
|
|
34
|
+
* Слот ручки drag&drop (Figma `centeredWrapper`) — рендерится первым в строке, перед
|
|
35
|
+
* маркером/чекбоксом. Интерактивность (обработчики `@dnd-kit`) и содержимое (иконка)
|
|
36
|
+
* приходят снаружи — `BaseItem` только позиционирует слот, ничего не знает про DnD.
|
|
37
|
+
*/
|
|
38
|
+
dragHandle?: ReactNode;
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
export function BaseItem({
|
|
42
|
+
beforeContent,
|
|
43
|
+
afterContent,
|
|
44
|
+
content,
|
|
45
|
+
onClick,
|
|
46
|
+
onMouseDown,
|
|
47
|
+
id,
|
|
48
|
+
expandIcon,
|
|
49
|
+
disabled,
|
|
50
|
+
open,
|
|
51
|
+
itemRef,
|
|
52
|
+
switch: switchProp,
|
|
53
|
+
onKeyDown,
|
|
54
|
+
onFocus,
|
|
55
|
+
indeterminate,
|
|
56
|
+
checked: checkedProp,
|
|
57
|
+
onSelect,
|
|
58
|
+
onOpenNestedList,
|
|
59
|
+
onExpandIconClick,
|
|
60
|
+
isParentNode,
|
|
61
|
+
className,
|
|
62
|
+
inactive,
|
|
63
|
+
itemWrapRender,
|
|
64
|
+
dragHandle,
|
|
65
|
+
...rest
|
|
66
|
+
}: AllBaseItemProps) {
|
|
67
|
+
const interactive = !inactive;
|
|
68
|
+
|
|
69
|
+
const { size = DEFAULT_SIZE, marker, contentRender, firstItemId, focusFlattenItems } = useNewListContext();
|
|
70
|
+
const { level = 0 } = useCollapseLevelContext();
|
|
71
|
+
const { closeDroplist, closeDroplistOnItemClick } = useOpenListContext();
|
|
72
|
+
const { value, onChange, mode, isSelectionSingle, isSelectionMultiple } = useSelectionContext();
|
|
73
|
+
|
|
74
|
+
const isChecked = isSelectionSingle ? (checkedProp ?? value === id) : (checkedProp ?? value?.includes(id ?? ''));
|
|
75
|
+
|
|
76
|
+
const handleChange = () => {
|
|
77
|
+
onChange?.(id);
|
|
78
|
+
};
|
|
79
|
+
|
|
80
|
+
const handleItemMouseDown = (e: MouseEvent<HTMLElement>) => {
|
|
81
|
+
if (disabled) return;
|
|
82
|
+
|
|
83
|
+
onMouseDown?.(e);
|
|
84
|
+
};
|
|
85
|
+
|
|
86
|
+
const handleItemFocus = (e: FocusEvent<HTMLElement>) => {
|
|
87
|
+
onFocus?.(e);
|
|
88
|
+
e.stopPropagation();
|
|
89
|
+
};
|
|
90
|
+
|
|
91
|
+
const handleCheckboxChange = () => {
|
|
92
|
+
if (isParentNode && onSelect) {
|
|
93
|
+
onSelect();
|
|
94
|
+
} else {
|
|
95
|
+
handleChange();
|
|
96
|
+
}
|
|
97
|
+
};
|
|
98
|
+
|
|
99
|
+
const handleItemClick = (e: MouseEvent<HTMLElement> | KeyboardEvent<HTMLElement>) => {
|
|
100
|
+
if (disabled) {
|
|
101
|
+
return;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
// Активация элемента: клик мышью и Enter/Space с клавиатуры дают одинаковый эффект.
|
|
105
|
+
// `onClick` в публичном API типизирован под `MouseEvent` (это семантически клик по
|
|
106
|
+
// пункту меню), поэтому keyboard-событие пробрасывается под тем же типом.
|
|
107
|
+
onClick?.(e as MouseEvent<HTMLElement>);
|
|
108
|
+
|
|
109
|
+
if (interactive && !isParentNode) {
|
|
110
|
+
handleChange();
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
if (!isSelectionMultiple && closeDroplistOnItemClick) {
|
|
114
|
+
closeDroplist();
|
|
115
|
+
}
|
|
116
|
+
};
|
|
117
|
+
|
|
118
|
+
const handleItemKeyDown = (e: KeyboardEvent<HTMLElement>) => {
|
|
119
|
+
onKeyDown?.(e);
|
|
120
|
+
|
|
121
|
+
if (e.key === 'ArrowRight' && onOpenNestedList) {
|
|
122
|
+
onOpenNestedList(e);
|
|
123
|
+
|
|
124
|
+
e.preventDefault();
|
|
125
|
+
e.stopPropagation();
|
|
126
|
+
|
|
127
|
+
return;
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
if (e.key === 'Enter' || e.key === ' ') {
|
|
131
|
+
if (isSelectionMultiple && isParentNode && onSelect) {
|
|
132
|
+
onSelect();
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
// Повторяем клик по элементу: `handleItemClick` сам вызывает `handleChange` /
|
|
136
|
+
// `closeDroplist`. Отдельный `handleChange` здесь не нужен — иначе в multiple-режиме
|
|
137
|
+
// выбор переключался бы дважды (toggle + откат) и Enter не менял бы состояние.
|
|
138
|
+
!isParentNode && handleItemClick(e);
|
|
139
|
+
|
|
140
|
+
e.stopPropagation();
|
|
141
|
+
e.preventDefault();
|
|
142
|
+
}
|
|
143
|
+
};
|
|
144
|
+
|
|
145
|
+
const handleCheckboxClick = (e: MouseEvent) => {
|
|
146
|
+
if (isParentNode) {
|
|
147
|
+
e.stopPropagation();
|
|
148
|
+
}
|
|
149
|
+
};
|
|
150
|
+
|
|
151
|
+
const handleExpandIconClick = (e: MouseEvent<HTMLElement>) => {
|
|
152
|
+
if (disabled) {
|
|
153
|
+
return;
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
// Триггер раскрытия изолирован от клика по строке: всплытие останавливаем,
|
|
157
|
+
// чтобы клик по шеврону не активировал выбор/навигацию пункта.
|
|
158
|
+
e.stopPropagation();
|
|
159
|
+
e.preventDefault();
|
|
160
|
+
onExpandIconClick?.(e);
|
|
161
|
+
};
|
|
162
|
+
|
|
163
|
+
const props = extractSupportProps(rest);
|
|
164
|
+
|
|
165
|
+
let contentNode: ReactNode;
|
|
166
|
+
if (content && isContentItem(content)) {
|
|
167
|
+
contentNode = contentRender?.({ id, content, disabled }) ?? <ItemContent disabled={disabled} {...content} />;
|
|
168
|
+
} else if (isPrimitiveContent(content)) {
|
|
169
|
+
// Примитивный content — шорткат `{ label: content }`: рендерим через ItemContent,
|
|
170
|
+
// чтобы строка получила размерную высоту, а не схлопывалась до высоты текста.
|
|
171
|
+
contentNode = <ItemContent disabled={disabled} label={content} />;
|
|
172
|
+
} else {
|
|
173
|
+
contentNode = <div className={styles.content}> {content} </div>;
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
const stateLayerState =
|
|
177
|
+
isSelectionSingle && isChecked && !switchProp && !isParentNode
|
|
178
|
+
? 'activatedOnBackground'
|
|
179
|
+
: 'emptyNeutralOnBackground';
|
|
180
|
+
|
|
181
|
+
const itemJSX = (
|
|
182
|
+
<div
|
|
183
|
+
className={cn(commonStyles.itemWrapper, styles.innerWrapper, className)}
|
|
184
|
+
data-inactive={inactive || undefined}
|
|
185
|
+
data-disabled={disabled || undefined}
|
|
186
|
+
data-variant={mode || undefined}
|
|
187
|
+
data-checked={(isParentNode && isChecked) || (!isParentNode && isChecked && !switchProp) || undefined}
|
|
188
|
+
>
|
|
189
|
+
<span className={commonStyles.stateLayer} aria-hidden data-state={stateLayerState} />
|
|
190
|
+
<li
|
|
191
|
+
data-type='outside'
|
|
192
|
+
role={'menuitem'}
|
|
193
|
+
data-test-id={props['data-test-id'] || `${TEST_IDS.baseItem}_${id}`}
|
|
194
|
+
ref={itemRef as RefObject<HTMLLIElement>}
|
|
195
|
+
className={cn(commonStyles.listItem, styles.droplistItem)}
|
|
196
|
+
data-size={size}
|
|
197
|
+
onClick={handleItemClick}
|
|
198
|
+
onMouseDown={handleItemMouseDown}
|
|
199
|
+
tabIndex={firstItemId && id === focusFlattenItems[firstItemId]?.originalId ? 0 : -1}
|
|
200
|
+
data-non-pointer={(inactive && !onClick) || undefined}
|
|
201
|
+
data-variant={mode || undefined}
|
|
202
|
+
data-open={open || undefined}
|
|
203
|
+
onKeyDown={handleItemKeyDown}
|
|
204
|
+
onFocus={handleItemFocus}
|
|
205
|
+
style={{ '--level': level }}
|
|
206
|
+
data-level-one={level === 1 || undefined}
|
|
207
|
+
data-level-more-one={level > 1 || undefined}
|
|
208
|
+
data-checked={(isParentNode && (indeterminate || isChecked)) || (isChecked && !switchProp) || undefined}
|
|
209
|
+
>
|
|
210
|
+
{dragHandle && <div className={styles.dragHandle}>{dragHandle}</div>}
|
|
211
|
+
|
|
212
|
+
{!switchProp && isSelectionSingle && marker && !isParentNode && interactive && (
|
|
213
|
+
<div className={styles.markerContainer} data-test-id={TEST_IDS.baseItemMarker} />
|
|
214
|
+
)}
|
|
215
|
+
|
|
216
|
+
{!switchProp && isSelectionMultiple && interactive && (
|
|
217
|
+
<div className={styles.checkbox}>
|
|
218
|
+
<Checkbox
|
|
219
|
+
size={TOGGLE_SIZE_MAP[size]}
|
|
220
|
+
disabled={disabled}
|
|
221
|
+
tabIndex={-1}
|
|
222
|
+
onChange={isParentNode ? handleCheckboxChange : undefined}
|
|
223
|
+
checked={isChecked}
|
|
224
|
+
data-test-id={TEST_IDS.baseItemCheckbox}
|
|
225
|
+
onClick={handleCheckboxClick}
|
|
226
|
+
indeterminate={indeterminate}
|
|
227
|
+
/>
|
|
228
|
+
</div>
|
|
229
|
+
)}
|
|
230
|
+
|
|
231
|
+
{beforeContent && <div className={styles.beforeContent}>{beforeContent}</div>}
|
|
232
|
+
{contentNode}
|
|
233
|
+
{afterContent && <div className={styles.afterContent}>{afterContent}</div>}
|
|
234
|
+
|
|
235
|
+
{switchProp && interactive && (
|
|
236
|
+
<Switch
|
|
237
|
+
size={TOGGLE_SIZE_MAP[size]}
|
|
238
|
+
disabled={disabled}
|
|
239
|
+
checked={isChecked}
|
|
240
|
+
data-test-id={TEST_IDS.baseItemSwitch}
|
|
241
|
+
// TODO Phase 5: восстановить поддержку showIcon={showSwitchIcon} когда появится в @cloud-ru/ds-toggles
|
|
242
|
+
/>
|
|
243
|
+
)}
|
|
244
|
+
|
|
245
|
+
{!switchProp &&
|
|
246
|
+
expandIcon &&
|
|
247
|
+
(onExpandIconClick ? (
|
|
248
|
+
<button
|
|
249
|
+
type='button'
|
|
250
|
+
className={styles.groupIndicator}
|
|
251
|
+
data-size={size}
|
|
252
|
+
data-open={open || undefined}
|
|
253
|
+
data-test-id={TEST_IDS.groupIndicator}
|
|
254
|
+
tabIndex={-1}
|
|
255
|
+
disabled={disabled}
|
|
256
|
+
onClick={handleExpandIconClick}
|
|
257
|
+
onMouseDown={e => e.stopPropagation()}
|
|
258
|
+
>
|
|
259
|
+
<span className={styles.groupIndicatorState} aria-hidden />
|
|
260
|
+
{expandIcon}
|
|
261
|
+
</button>
|
|
262
|
+
) : (
|
|
263
|
+
<span className={styles.expandableIcon}>{expandIcon}</span>
|
|
264
|
+
))}
|
|
265
|
+
</li>
|
|
266
|
+
</div>
|
|
267
|
+
);
|
|
268
|
+
|
|
269
|
+
if (!itemWrapRender) {
|
|
270
|
+
return itemJSX;
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
return itemWrapRender(itemJSX);
|
|
274
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './BaseItem';
|