@snack-uikit/list 0.10.0 → 0.10.1-preview-69abc1d3.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.
Files changed (127) hide show
  1. package/README.md +56 -24
  2. package/dist/components/Items/AccordionItem/AccordionItem.d.ts +4 -2
  3. package/dist/components/Items/AccordionItem/AccordionItem.js +18 -16
  4. package/dist/components/Items/BaseItem/BaseItem.d.ts +8 -4
  5. package/dist/components/Items/BaseItem/BaseItem.js +20 -14
  6. package/dist/components/Items/BaseItem/styles.module.css +9 -122
  7. package/dist/components/Items/GroupItem/GroupItem.d.ts +5 -1
  8. package/dist/components/Items/GroupItem/GroupItem.js +1 -3
  9. package/dist/components/Items/GroupSelectItem/GroupSelectItem.d.ts +4 -0
  10. package/dist/components/Items/GroupSelectItem/GroupSelectItem.js +18 -0
  11. package/dist/components/Items/GroupSelectItem/index.d.ts +1 -0
  12. package/dist/components/Items/GroupSelectItem/index.js +1 -0
  13. package/dist/components/Items/NextListItem/NextListItem.d.ts +6 -2
  14. package/dist/components/Items/NextListItem/NextListItem.js +53 -45
  15. package/dist/components/Items/NextListItem/constants.d.ts +2 -0
  16. package/dist/components/Items/NextListItem/constants.js +10 -0
  17. package/dist/components/Items/SearchItem/SearchItem.d.ts +3 -1
  18. package/dist/components/Items/SearchItem/SearchItem.js +5 -8
  19. package/dist/components/Items/hooks.d.ts +11 -10
  20. package/dist/components/Items/hooks.js +64 -46
  21. package/dist/components/Items/index.d.ts +1 -5
  22. package/dist/components/Items/index.js +1 -5
  23. package/dist/components/Items/types.d.ts +68 -34
  24. package/dist/components/Items/utils.d.ts +33 -16
  25. package/dist/components/Items/utils.js +132 -37
  26. package/dist/components/Lists/Droplist/DropList.d.ts +1 -1
  27. package/dist/components/Lists/Droplist/DropList.js +73 -50
  28. package/dist/components/Lists/List/List.d.ts +5 -9
  29. package/dist/components/Lists/List/List.js +56 -54
  30. package/dist/components/Lists/ListPrivate/ListPrivate.d.ts +6 -20
  31. package/dist/components/Lists/ListPrivate/ListPrivate.js +9 -8
  32. package/dist/components/Lists/ListPrivate/styles.module.css +1 -0
  33. package/dist/components/Lists/contexts/CollapseProvider.d.ts +13 -1
  34. package/dist/components/Lists/contexts/CollapseProvider.js +2 -0
  35. package/dist/components/Lists/contexts/FocusListProvider.d.ts +9 -0
  36. package/dist/components/Lists/contexts/FocusListProvider.js +5 -0
  37. package/dist/components/Lists/contexts/NewListProvider.d.ts +32 -0
  38. package/dist/components/Lists/contexts/{ListProvider.js → NewListProvider.js} +10 -5
  39. package/dist/components/Lists/contexts/SelectionProvider.d.ts +25 -15
  40. package/dist/components/Lists/contexts/SelectionProvider.js +17 -13
  41. package/dist/components/Lists/contexts/index.d.ts +2 -2
  42. package/dist/components/Lists/contexts/index.js +2 -2
  43. package/dist/components/Lists/hooks.d.ts +10 -12
  44. package/dist/components/Lists/hooks.js +73 -40
  45. package/dist/components/Lists/types.d.ts +12 -14
  46. package/dist/components/index.d.ts +2 -2
  47. package/dist/components/index.js +1 -1
  48. package/dist/helperComponents/ItemContent/ItemContent.d.ts +15 -0
  49. package/dist/helperComponents/ItemContent/ItemContent.js +23 -0
  50. package/dist/helperComponents/ItemContent/index.d.ts +1 -0
  51. package/dist/helperComponents/ItemContent/index.js +1 -0
  52. package/dist/helperComponents/ItemContent/styles.module.css +117 -0
  53. package/dist/helperComponents/ListEmptyState/ListEmptyState.d.ts +2 -2
  54. package/dist/helperComponents/ListEmptyState/ListEmptyState.js +13 -4
  55. package/dist/helperComponents/Separator/Separator.d.ts +8 -2
  56. package/dist/helperComponents/Separator/Separator.js +22 -2
  57. package/dist/helperComponents/Separator/constants.d.ts +2 -0
  58. package/dist/helperComponents/Separator/constants.js +5 -0
  59. package/dist/helperComponents/Separator/styles.module.css +20 -1
  60. package/dist/helperComponents/index.d.ts +1 -0
  61. package/dist/helperComponents/index.js +1 -0
  62. package/dist/hooks.d.ts +1 -1
  63. package/dist/hooks.js +15 -10
  64. package/dist/index.d.ts +3 -2
  65. package/dist/index.js +3 -2
  66. package/dist/legacy/components/Items/hooks.d.ts +12 -0
  67. package/dist/legacy/components/Items/hooks.js +33 -0
  68. package/dist/legacy/components/index.d.ts +1 -0
  69. package/dist/legacy/components/index.js +1 -0
  70. package/dist/legacy/hooks.d.ts +5 -0
  71. package/dist/legacy/hooks.js +15 -0
  72. package/dist/legacy/index.d.ts +3 -0
  73. package/dist/legacy/index.js +3 -0
  74. package/dist/{utils.d.ts → legacy/utils.d.ts} +2 -3
  75. package/dist/{utils.js → legacy/utils.js} +4 -12
  76. package/dist/types.d.ts +1 -1
  77. package/package.json +14 -14
  78. package/src/components/Items/AccordionItem/AccordionItem.tsx +24 -20
  79. package/src/components/Items/BaseItem/BaseItem.tsx +48 -43
  80. package/src/components/Items/BaseItem/styles.module.scss +8 -70
  81. package/src/components/Items/GroupItem/GroupItem.tsx +5 -5
  82. package/src/components/Items/GroupSelectItem/GroupSelectItem.tsx +44 -0
  83. package/src/components/Items/GroupSelectItem/index.ts +1 -0
  84. package/src/components/Items/NextListItem/NextListItem.tsx +86 -85
  85. package/src/components/Items/NextListItem/constants.ts +12 -0
  86. package/src/components/Items/SearchItem/SearchItem.tsx +6 -8
  87. package/src/components/Items/hooks.tsx +86 -66
  88. package/src/components/Items/index.ts +1 -5
  89. package/src/components/Items/types.ts +91 -42
  90. package/src/components/Items/utils.ts +193 -52
  91. package/src/components/Lists/Droplist/DropList.tsx +151 -98
  92. package/src/components/Lists/List/List.tsx +124 -104
  93. package/src/components/Lists/ListPrivate/ListPrivate.tsx +19 -20
  94. package/src/components/Lists/ListPrivate/styles.module.scss +1 -0
  95. package/src/components/Lists/contexts/CollapseProvider.tsx +22 -0
  96. package/src/components/Lists/contexts/FocusListProvider.tsx +16 -0
  97. package/src/components/Lists/contexts/NewListProvider.tsx +54 -0
  98. package/src/components/Lists/contexts/SelectionProvider.tsx +56 -39
  99. package/src/components/Lists/contexts/index.ts +3 -2
  100. package/src/components/Lists/hooks.ts +124 -75
  101. package/src/components/Lists/types.ts +20 -24
  102. package/src/components/index.ts +16 -2
  103. package/src/helperComponents/ItemContent/ItemContent.tsx +63 -0
  104. package/src/helperComponents/ItemContent/index.ts +1 -0
  105. package/src/helperComponents/ItemContent/styles.module.scss +78 -0
  106. package/src/helperComponents/ListEmptyState/ListEmptyState.tsx +26 -12
  107. package/src/helperComponents/Separator/Separator.tsx +49 -3
  108. package/src/helperComponents/Separator/constants.ts +7 -0
  109. package/src/helperComponents/Separator/styles.module.scss +41 -1
  110. package/src/helperComponents/index.ts +1 -0
  111. package/src/hooks.ts +21 -15
  112. package/src/index.ts +5 -2
  113. package/src/legacy/components/Items/hooks.tsx +53 -0
  114. package/src/legacy/components/index.ts +1 -0
  115. package/src/legacy/hooks.ts +27 -0
  116. package/src/legacy/index.ts +3 -0
  117. package/src/{utils.ts → legacy/utils.ts} +4 -13
  118. package/src/types.ts +1 -1
  119. package/dist/components/Items/NextListItem/hooks.d.ts +0 -19
  120. package/dist/components/Items/NextListItem/hooks.js +0 -80
  121. package/dist/components/Lists/contexts/ListProvider.d.ts +0 -17
  122. package/dist/components/Lists/contexts/ParentListProvider.d.ts +0 -18
  123. package/dist/components/Lists/contexts/ParentListProvider.js +0 -12
  124. package/src/components/Items/NextListItem/hooks.ts +0 -105
  125. package/src/components/Lists/contexts/CollapseProvider.ts +0 -9
  126. package/src/components/Lists/contexts/ListProvider.tsx +0 -28
  127. package/src/components/Lists/contexts/ParentListProvider.tsx +0 -35
@@ -1,80 +0,0 @@
1
- import { useCallback, useEffect, useState } from 'react';
2
- import { useParentListContext } from '../../Lists/contexts';
3
- export function useKeyboardNavigation({ ids, expandedIds, itemRefs, id }) {
4
- const { triggerRef, parentResetNestedIndex, parentIds, parentItemRefs, parentOpenNestedIndex } = useParentListContext();
5
- const [activeFocusIndex, setActiveFocusIndex] = useState(-1);
6
- const [openNestedIndex, setOpenNestedIndex] = useState(-1);
7
- const [open, setOpen] = useState(false);
8
- const handleListKeyDown = (e) => {
9
- var _a, _b;
10
- switch (e.key) {
11
- case 'ArrowDown': {
12
- setActiveFocusIndex(activeIndex => Math.min(activeIndex + 1, ids.length - 1));
13
- e.stopPropagation();
14
- e.preventDefault();
15
- return;
16
- }
17
- case 'ArrowUp': {
18
- setActiveFocusIndex(activeIndex => Math.max(activeIndex - 1, 0));
19
- e.preventDefault();
20
- e.stopPropagation();
21
- return;
22
- }
23
- case 'ArrowRight': {
24
- e.stopPropagation();
25
- e.preventDefault();
26
- if (expandedIds.includes(ids[activeFocusIndex])) {
27
- setOpenNestedIndex(activeFocusIndex);
28
- }
29
- return;
30
- }
31
- case 'ArrowLeft': {
32
- (_a = parentItemRefs === null || parentItemRefs === void 0 ? void 0 : parentItemRefs[parentOpenNestedIndex].current) === null || _a === void 0 ? void 0 : _a.focus();
33
- parentResetNestedIndex === null || parentResetNestedIndex === void 0 ? void 0 : parentResetNestedIndex();
34
- setActiveFocusIndex(-1);
35
- setOpenNestedIndex(-1);
36
- setOpen(false);
37
- e.stopPropagation();
38
- e.preventDefault();
39
- return;
40
- }
41
- case 'Tab': {
42
- (_b = triggerRef === null || triggerRef === void 0 ? void 0 : triggerRef.current) === null || _b === void 0 ? void 0 : _b.focus();
43
- parentResetNestedIndex === null || parentResetNestedIndex === void 0 ? void 0 : parentResetNestedIndex();
44
- setActiveFocusIndex(-1);
45
- setOpen(false);
46
- e.preventDefault();
47
- return;
48
- }
49
- default: {
50
- break;
51
- }
52
- }
53
- };
54
- useEffect(() => {
55
- var _a, _b;
56
- (_b = (_a = itemRefs === null || itemRefs === void 0 ? void 0 : itemRefs[activeFocusIndex]) === null || _a === void 0 ? void 0 : _a.current) === null || _b === void 0 ? void 0 : _b.focus();
57
- }, [activeFocusIndex, itemRefs]);
58
- useEffect(() => {
59
- if (parentIds[parentOpenNestedIndex] === id && openNestedIndex === -1) {
60
- setOpen(true);
61
- setActiveFocusIndex(activeIndex => (activeIndex === -1 ? 0 : activeIndex));
62
- }
63
- }, [id, openNestedIndex, parentIds, parentOpenNestedIndex]);
64
- const resetNestedIndex = () => {
65
- setActiveFocusIndex(openNestedIndex);
66
- setOpenNestedIndex(-1);
67
- };
68
- const resetActiveFocusIndex = useCallback(() => setActiveFocusIndex(-1), []);
69
- return {
70
- activeFocusIndex,
71
- setActiveFocusIndex,
72
- openNestedIndex,
73
- setOpenNestedIndex,
74
- resetNestedIndex,
75
- resetActiveFocusIndex,
76
- handleListKeyDown,
77
- open,
78
- setOpen,
79
- };
80
- }
@@ -1,17 +0,0 @@
1
- import { ReactNode } from 'react';
2
- export type ListContextType = {
3
- /** Размер списка */
4
- size?: 's' | 'm' | 'l';
5
- /** Отображать ли маркер у выбранного жлемента списка */
6
- marker?: boolean;
7
- };
8
- export type ListContextPrivateType = {
9
- parent?: 'list' | 'droplist';
10
- };
11
- type Child = {
12
- children: ReactNode;
13
- };
14
- export declare const ListContext: import("react").Context<ListContextType & ListContextPrivateType>;
15
- export declare const useListContext: () => ListContextType & ListContextPrivateType;
16
- export declare function ListContextProvider({ children, ...props }: ListContextType & Child & ListContextPrivateType): import("react/jsx-runtime").JSX.Element;
17
- export {};
@@ -1,18 +0,0 @@
1
- import { RefObject } from 'react';
2
- export type ParentListContextType = {
3
- parentActiveFocusIndex: number;
4
- parentSetActiveFocusIndex?(idx: number): void;
5
- parentResetActiveFocusIndex?(): void;
6
- parentIds: Array<string | number>;
7
- parentExpandedIds: Array<string | number>;
8
- parentItemRefs: Array<RefObject<HTMLElement>>;
9
- parentOpenNestedIndex: number;
10
- parentResetNestedIndex?(): void;
11
- openCollapsedItems?: Array<string | number>;
12
- toggleOpenCollapsedItems?(id: string | number): void;
13
- triggerRef?: RefObject<HTMLElement>;
14
- parentRef?: RefObject<HTMLElement>;
15
- };
16
- export declare const ParentListContext: import("react").Context<ParentListContextType>;
17
- export declare const useParentListContext: () => ParentListContextType;
18
- export declare function ParentListProvider(): null;
@@ -1,12 +0,0 @@
1
- import { createContext, useContext } from 'react';
2
- export const ParentListContext = createContext({
3
- parentActiveFocusIndex: -1,
4
- parentOpenNestedIndex: -1,
5
- parentIds: [],
6
- parentExpandedIds: [],
7
- parentItemRefs: [],
8
- });
9
- export const useParentListContext = () => useContext(ParentListContext);
10
- export function ParentListProvider() {
11
- return null;
12
- }
@@ -1,105 +0,0 @@
1
- import { KeyboardEvent, RefObject, useCallback, useEffect, useState } from 'react';
2
-
3
- import { useParentListContext } from '../../Lists/contexts';
4
-
5
- type UseKeyboardNavigationProps = {
6
- ids: Array<number | string>;
7
- expandedIds: Array<number | string>;
8
- itemRefs?: RefObject<HTMLElement>[];
9
- id?: string | number;
10
- };
11
-
12
- export function useKeyboardNavigation({ ids, expandedIds, itemRefs, id }: UseKeyboardNavigationProps) {
13
- const { triggerRef, parentResetNestedIndex, parentIds, parentItemRefs, parentOpenNestedIndex } =
14
- useParentListContext();
15
-
16
- const [activeFocusIndex, setActiveFocusIndex] = useState<number>(-1);
17
- const [openNestedIndex, setOpenNestedIndex] = useState<number>(-1);
18
- const [open, setOpen] = useState<boolean>(false);
19
-
20
- const handleListKeyDown = (e: KeyboardEvent<HTMLElement>) => {
21
- switch (e.key) {
22
- case 'ArrowDown': {
23
- setActiveFocusIndex(activeIndex => Math.min(activeIndex + 1, ids.length - 1));
24
-
25
- e.stopPropagation();
26
- e.preventDefault();
27
- return;
28
- }
29
- case 'ArrowUp': {
30
- setActiveFocusIndex(activeIndex => Math.max(activeIndex - 1, 0));
31
-
32
- e.preventDefault();
33
- e.stopPropagation();
34
- return;
35
- }
36
- case 'ArrowRight': {
37
- e.stopPropagation();
38
- e.preventDefault();
39
-
40
- if (expandedIds.includes(ids[activeFocusIndex])) {
41
- setOpenNestedIndex(activeFocusIndex);
42
- }
43
-
44
- return;
45
- }
46
- case 'ArrowLeft': {
47
- parentItemRefs?.[parentOpenNestedIndex].current?.focus();
48
-
49
- parentResetNestedIndex?.();
50
- setActiveFocusIndex(-1);
51
- setOpenNestedIndex(-1);
52
-
53
- setOpen(false);
54
-
55
- e.stopPropagation();
56
- e.preventDefault();
57
- return;
58
- }
59
-
60
- case 'Tab': {
61
- triggerRef?.current?.focus();
62
- parentResetNestedIndex?.();
63
- setActiveFocusIndex(-1);
64
- setOpen(false);
65
- e.preventDefault();
66
-
67
- return;
68
- }
69
-
70
- default: {
71
- break;
72
- }
73
- }
74
- };
75
-
76
- useEffect(() => {
77
- itemRefs?.[activeFocusIndex]?.current?.focus();
78
- }, [activeFocusIndex, itemRefs]);
79
-
80
- useEffect(() => {
81
- if (parentIds[parentOpenNestedIndex] === id && openNestedIndex === -1) {
82
- setOpen(true);
83
- setActiveFocusIndex(activeIndex => (activeIndex === -1 ? 0 : activeIndex));
84
- }
85
- }, [id, openNestedIndex, parentIds, parentOpenNestedIndex]);
86
-
87
- const resetNestedIndex = () => {
88
- setActiveFocusIndex(openNestedIndex);
89
- setOpenNestedIndex(-1);
90
- };
91
-
92
- const resetActiveFocusIndex = useCallback(() => setActiveFocusIndex(-1), []);
93
-
94
- return {
95
- activeFocusIndex,
96
- setActiveFocusIndex,
97
- openNestedIndex,
98
- setOpenNestedIndex,
99
- resetNestedIndex,
100
- resetActiveFocusIndex,
101
- handleListKeyDown,
102
- open,
103
- setOpen,
104
- };
105
- }
@@ -1,9 +0,0 @@
1
- import { createContext, useContext } from 'react';
2
-
3
- export type CollapseContextType = {
4
- level?: number;
5
- };
6
-
7
- export const CollapseContext = createContext<CollapseContextType>({});
8
-
9
- export const useCollapseContext = () => useContext(CollapseContext);
@@ -1,28 +0,0 @@
1
- import { createContext, ReactNode, useContext } from 'react';
2
-
3
- export type ListContextType = {
4
- /** Размер списка */
5
- size?: 's' | 'm' | 'l';
6
- /** Отображать ли маркер у выбранного жлемента списка */
7
- marker?: boolean;
8
- };
9
-
10
- export type ListContextPrivateType = {
11
- parent?: 'list' | 'droplist';
12
- };
13
-
14
- type Child = {
15
- children: ReactNode;
16
- };
17
-
18
- export const ListContext = createContext<ListContextType & ListContextPrivateType>({});
19
-
20
- export const useListContext = () => useContext(ListContext);
21
-
22
- function extractListProps<T extends ListContextType & ListContextPrivateType>({ size, marker, parent }: T) {
23
- return { size, marker, parent };
24
- }
25
-
26
- export function ListContextProvider({ children, ...props }: ListContextType & Child & ListContextPrivateType) {
27
- return <ListContext.Provider value={extractListProps(props)}>{children}</ListContext.Provider>;
28
- }
@@ -1,35 +0,0 @@
1
- import { createContext, RefObject, useContext } from 'react';
2
-
3
- export type ParentListContextType = {
4
- parentActiveFocusIndex: number;
5
- parentSetActiveFocusIndex?(idx: number): void;
6
- parentResetActiveFocusIndex?(): void;
7
-
8
- parentIds: Array<string | number>;
9
- parentExpandedIds: Array<string | number>;
10
- parentItemRefs: Array<RefObject<HTMLElement>>;
11
-
12
- parentOpenNestedIndex: number;
13
- parentResetNestedIndex?(): void;
14
-
15
- openCollapsedItems?: Array<string | number>;
16
- toggleOpenCollapsedItems?(id: string | number): void;
17
-
18
- triggerRef?: RefObject<HTMLElement>;
19
- parentRef?: RefObject<HTMLElement>;
20
- };
21
-
22
- export const ParentListContext = createContext<ParentListContextType>({
23
- parentActiveFocusIndex: -1,
24
- parentOpenNestedIndex: -1,
25
-
26
- parentIds: [],
27
- parentExpandedIds: [],
28
- parentItemRefs: [],
29
- });
30
-
31
- export const useParentListContext = () => useContext(ParentListContext);
32
-
33
- export function ParentListProvider() {
34
- return null;
35
- }