@consta/uikit 4.32.0 → 4.33.1
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/AttachmentCanary/index.d.ts +1 -0
- package/AttachmentCanary/index.js +1 -0
- package/PaginationCanary/index.d.ts +1 -0
- package/PaginationCanary/index.js +1 -0
- package/__internal__/src/components/AttachmentCanary/Attachment.css +1 -0
- package/__internal__/src/components/AttachmentCanary/AttachmentCanary.d.ts +5 -0
- package/__internal__/src/components/AttachmentCanary/AttachmentCanary.js +2 -0
- package/__internal__/src/components/AttachmentCanary/AttachmentCanary.js.map +1 -0
- package/__internal__/src/components/AttachmentCanary/index.d.ts +1 -0
- package/__internal__/src/components/AttachmentCanary/index.js +2 -0
- package/__internal__/src/components/AttachmentCanary/index.js.map +1 -0
- package/__internal__/src/components/AttachmentCanary/types.d.ts +22 -0
- package/__internal__/src/components/AttachmentCanary/types.js +2 -0
- package/__internal__/src/components/AttachmentCanary/types.js.map +1 -0
- package/__internal__/src/components/CheckboxGroup/CheckboxGroup.js +1 -1
- package/__internal__/src/components/CheckboxGroup/CheckboxGroup.js.map +1 -1
- package/__internal__/src/components/CheckboxGroup/helper.d.ts +1 -0
- package/__internal__/src/components/CheckboxGroup/types.d.ts +13 -9
- package/__internal__/src/components/CheckboxGroup/types.js +1 -1
- package/__internal__/src/components/CheckboxGroup/types.js.map +1 -1
- package/__internal__/src/components/ChoiceGroup/types.d.ts +3 -3
- package/__internal__/src/components/ChoiceGroup/types.js.map +1 -1
- package/__internal__/src/components/ChoiceGroupDeprecated/ChoiceGroupDeprecated.d.ts +3 -3
- package/__internal__/src/components/ChoiceGroupDeprecated/ChoiceGroupDeprecated.js.map +1 -1
- package/__internal__/src/components/DateTime/helpers/getHandleSelectDate.d.ts +3 -3
- package/__internal__/src/components/DateTime/helpers/getHandleSelectDate.js.map +1 -1
- package/__internal__/src/components/DateTime/helpers/types.d.ts +4 -4
- package/__internal__/src/components/DateTime/helpers/types.js.map +1 -1
- package/__internal__/src/components/DragNDropField/DragNDropFieldTooltip/DragNDropFieldTooltip.js +1 -1
- package/__internal__/src/components/DragNDropField/DragNDropFieldTooltip/DragNDropFieldTooltip.js.map +1 -1
- package/__internal__/src/components/PaginationCanary/Pagination.css +1 -0
- package/__internal__/src/components/PaginationCanary/PaginationArrow/PaginationArrow.css +1 -0
- package/__internal__/src/components/PaginationCanary/PaginationArrow/PaginationArrow.d.ts +11 -0
- package/__internal__/src/components/PaginationCanary/PaginationArrow/PaginationArrow.js +2 -0
- package/__internal__/src/components/PaginationCanary/PaginationArrow/PaginationArrow.js.map +1 -0
- package/__internal__/src/components/PaginationCanary/PaginationArrow/index.d.ts +1 -0
- package/__internal__/src/components/PaginationCanary/PaginationArrow/index.js +2 -0
- package/__internal__/src/components/PaginationCanary/PaginationArrow/index.js.map +1 -0
- package/__internal__/src/components/PaginationCanary/PaginationBase/PaginationBase.css +1 -0
- package/__internal__/src/components/PaginationCanary/PaginationBase/PaginationBase.d.ts +3 -0
- package/__internal__/src/components/PaginationCanary/PaginationBase/PaginationBase.js +2 -0
- package/__internal__/src/components/PaginationCanary/PaginationBase/PaginationBase.js.map +1 -0
- package/__internal__/src/components/PaginationCanary/PaginationBase/index.d.ts +1 -0
- package/__internal__/src/components/PaginationCanary/PaginationBase/index.js +2 -0
- package/__internal__/src/components/PaginationCanary/PaginationBase/index.js.map +1 -0
- package/__internal__/src/components/PaginationCanary/PaginationCanary.d.ts +3 -0
- package/__internal__/src/components/PaginationCanary/PaginationCanary.js +2 -0
- package/__internal__/src/components/PaginationCanary/PaginationCanary.js.map +1 -0
- package/__internal__/src/components/PaginationCanary/PaginationItem/PaginationItem.css +1 -0
- package/__internal__/src/components/PaginationCanary/PaginationItem/PaginationItem.d.ts +3 -0
- package/__internal__/src/components/PaginationCanary/PaginationItem/PaginationItem.js +2 -0
- package/__internal__/src/components/PaginationCanary/PaginationItem/PaginationItem.js.map +1 -0
- package/__internal__/src/components/PaginationCanary/PaginationItem/index.d.ts +1 -0
- package/__internal__/src/components/PaginationCanary/PaginationItem/index.js +2 -0
- package/__internal__/src/components/PaginationCanary/PaginationItem/index.js.map +1 -0
- package/__internal__/src/components/PaginationCanary/PaginationList/PaginationList.css +1 -0
- package/__internal__/src/components/PaginationCanary/PaginationList/PaginationList.d.ts +3 -0
- package/__internal__/src/components/PaginationCanary/PaginationList/PaginationList.js +2 -0
- package/__internal__/src/components/PaginationCanary/PaginationList/PaginationList.js.map +1 -0
- package/__internal__/src/components/PaginationCanary/PaginationList/index.d.ts +1 -0
- package/__internal__/src/components/PaginationCanary/PaginationList/index.js +2 -0
- package/__internal__/src/components/PaginationCanary/PaginationList/index.js.map +1 -0
- package/__internal__/src/components/PaginationCanary/PaginationNumberInput/PaginationNumberInput.css +1 -0
- package/__internal__/src/components/PaginationCanary/PaginationNumberInput/PaginationNumberInput.d.ts +10 -0
- package/__internal__/src/components/PaginationCanary/PaginationNumberInput/PaginationNumberInput.js +2 -0
- package/__internal__/src/components/PaginationCanary/PaginationNumberInput/PaginationNumberInput.js.map +1 -0
- package/__internal__/src/components/PaginationCanary/PaginationNumberInput/index.d.ts +1 -0
- package/__internal__/src/components/PaginationCanary/PaginationNumberInput/index.js +2 -0
- package/__internal__/src/components/PaginationCanary/PaginationNumberInput/index.js.map +1 -0
- package/__internal__/src/components/PaginationCanary/helpers.d.ts +560 -0
- package/__internal__/src/components/PaginationCanary/helpers.js +2 -0
- package/__internal__/src/components/PaginationCanary/helpers.js.map +1 -0
- package/__internal__/src/components/PaginationCanary/index.d.ts +2 -0
- package/__internal__/src/components/PaginationCanary/index.js +2 -0
- package/__internal__/src/components/PaginationCanary/index.js.map +1 -0
- package/__internal__/src/components/PaginationCanary/types.d.ts +148 -0
- package/__internal__/src/components/PaginationCanary/types.js +2 -0
- package/__internal__/src/components/PaginationCanary/types.js.map +1 -0
- package/__internal__/src/components/PaginationCanary/usePaginationItems.d.ts +19 -0
- package/__internal__/src/components/PaginationCanary/usePaginationItems.js +2 -0
- package/__internal__/src/components/PaginationCanary/usePaginationItems.js.map +1 -0
- package/__internal__/src/components/PaginationCanary/usePaginationKeys.d.ts +10 -0
- package/__internal__/src/components/PaginationCanary/usePaginationKeys.js +2 -0
- package/__internal__/src/components/PaginationCanary/usePaginationKeys.js.map +1 -0
- package/__internal__/src/components/Tabs/Tabs.js +1 -1
- package/__internal__/src/components/Tabs/Tabs.js.map +1 -1
- package/__internal__/src/components/Tabs/{FitModeDropdownWrapper → TabsFitModeDropdownWrapper}/TabsFitModeDropdownWrapper.d.ts +1 -1
- package/__internal__/src/components/Tabs/TabsFitModeDropdownWrapper/TabsFitModeDropdownWrapper.js +2 -0
- package/__internal__/src/components/Tabs/TabsFitModeDropdownWrapper/TabsFitModeDropdownWrapper.js.map +1 -0
- package/__internal__/src/components/Tabs/TabsFitModeDropdownWrapper/useFittingItems.js.map +1 -0
- package/__internal__/src/components/Tabs/TabsFitModeScrollWrapper/TabsFitModeScrollWrapper.js +2 -0
- package/__internal__/src/components/Tabs/TabsFitModeScrollWrapper/TabsFitModeScrollWrapper.js.map +1 -0
- package/__internal__/src/components/Tabs/TabsFitModeScrollWrapper/__test__/helpers.test.js.map +1 -0
- package/__internal__/src/components/Tabs/TabsLine/TabsLine.js.map +1 -0
- package/__internal__/src/components/Tabs/TabsListWrapper/TabsListWrapper.d.ts +2 -0
- package/__internal__/src/components/Tabs/TabsListWrapper/TabsListWrapper.js +2 -0
- package/__internal__/src/components/Tabs/TabsListWrapper/TabsListWrapper.js.map +1 -0
- package/__internal__/src/components/Tabs/TabsListWrapper/index.d.ts +1 -0
- package/__internal__/src/components/Tabs/TabsListWrapper/index.js +2 -0
- package/__internal__/src/components/Tabs/TabsListWrapper/index.js.map +1 -0
- package/__internal__/src/components/Tabs/TabsMoreItems/TabsMoreItems.css +1 -0
- package/__internal__/src/components/Tabs/TabsMoreItems/TabsMoreItems.js +2 -0
- package/__internal__/src/components/Tabs/TabsMoreItems/TabsMoreItems.js.map +1 -0
- package/__internal__/src/components/Tabs/TabsTab/TabsTab.js.map +1 -0
- package/__internal__/src/components/Tabs/helpers.d.ts +329 -329
- package/__internal__/src/components/Tabs/helpers.js +1 -1
- package/__internal__/src/components/Tabs/helpers.js.map +1 -1
- package/__internal__/src/components/Tabs/index.d.ts +1 -1
- package/__internal__/src/components/Tabs/index.js +1 -1
- package/__internal__/src/components/Tabs/index.js.map +1 -1
- package/__internal__/src/components/Tabs/types.d.ts +3 -2
- package/__internal__/src/components/Tabs/types.js.map +1 -1
- package/__internal__/src/hooks/useHideElementsInLineCanary/useHideElementsInLineCanary.js +1 -1
- package/__internal__/src/hooks/useHideElementsInLineCanary/useHideElementsInLineCanary.js.map +1 -1
- package/package.json +1 -1
- package/__internal__/src/components/Tabs/FitModeDropdownWrapper/TabsFitModeDropdownWrapper.js +0 -2
- package/__internal__/src/components/Tabs/FitModeDropdownWrapper/TabsFitModeDropdownWrapper.js.map +0 -1
- package/__internal__/src/components/Tabs/FitModeDropdownWrapper/useFittingItems.js.map +0 -1
- package/__internal__/src/components/Tabs/FitModeScrollWrapper/TabsFitModeScrollWrapper.js +0 -2
- package/__internal__/src/components/Tabs/FitModeScrollWrapper/TabsFitModeScrollWrapper.js.map +0 -1
- package/__internal__/src/components/Tabs/FitModeScrollWrapper/__test__/helpers.test.js.map +0 -1
- package/__internal__/src/components/Tabs/Line/TabsLine.js.map +0 -1
- package/__internal__/src/components/Tabs/MoreItems/TabsMoreItems.css +0 -1
- package/__internal__/src/components/Tabs/MoreItems/TabsMoreItems.js +0 -2
- package/__internal__/src/components/Tabs/MoreItems/TabsMoreItems.js.map +0 -1
- package/__internal__/src/components/Tabs/Tab/TabsTab.js.map +0 -1
- /package/__internal__/src/components/Tabs/{FitModeDropdownWrapper → TabsFitModeDropdownWrapper}/TabsFitModeDropdownWrapper.css +0 -0
- /package/__internal__/src/components/Tabs/{FitModeDropdownWrapper → TabsFitModeDropdownWrapper}/useFittingItems.d.ts +0 -0
- /package/__internal__/src/components/Tabs/{FitModeDropdownWrapper → TabsFitModeDropdownWrapper}/useFittingItems.js +0 -0
- /package/__internal__/src/components/Tabs/{FitModeScrollWrapper → TabsFitModeScrollWrapper}/TabsFitModeScrollWrapper.css +0 -0
- /package/__internal__/src/components/Tabs/{FitModeScrollWrapper → TabsFitModeScrollWrapper}/TabsFitModeScrollWrapper.d.ts +0 -0
- /package/__internal__/src/components/Tabs/{FitModeScrollWrapper → TabsFitModeScrollWrapper}/__test__/helpers.test.d.ts +0 -0
- /package/__internal__/src/components/Tabs/{FitModeScrollWrapper → TabsFitModeScrollWrapper}/__test__/helpers.test.js +0 -0
- /package/__internal__/src/components/Tabs/{Line → TabsLine}/TabsLine.css +0 -0
- /package/__internal__/src/components/Tabs/{Line → TabsLine}/TabsLine.d.ts +0 -0
- /package/__internal__/src/components/Tabs/{Line → TabsLine}/TabsLine.js +0 -0
- /package/__internal__/src/components/Tabs/{MoreItems → TabsMoreItems}/TabsMoreItems.d.ts +0 -0
- /package/__internal__/src/components/Tabs/{Tab → TabsTab}/TabsTab.css +0 -0
- /package/__internal__/src/components/Tabs/{Tab → TabsTab}/TabsTab.d.ts +0 -0
- /package/__internal__/src/components/Tabs/{Tab → TabsTab}/TabsTab.js +0 -0
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
import { IconComponent } from '@consta/icons/Icon';
|
|
2
|
+
import React from 'react';
|
|
3
|
+
import { AsAttributes, AsTags } from "../../utils/types/AsTags";
|
|
4
|
+
import { PropsWithAsAttributes } from "../../utils/types/PropsWithAsAttributes";
|
|
5
|
+
import { PropsWithHTMLAttributes, PropsWithHTMLAttributesAndRef } from "../../utils/types/PropsWithHTMLAttributes";
|
|
6
|
+
export declare const paginationPropForm: readonly ["default", "brick", "round"];
|
|
7
|
+
export declare type PaginationPropForm = typeof paginationPropForm[number];
|
|
8
|
+
export declare const paginationPropFormDefault: PaginationPropForm;
|
|
9
|
+
export declare const paginationPropSize: readonly ["m", "xs", "s", "l"];
|
|
10
|
+
export declare type PaginationPropSize = typeof paginationPropSize[number];
|
|
11
|
+
export declare const paginationPropSizeDefault: PaginationPropSize;
|
|
12
|
+
export declare const paginationPropType: readonly ["default", "input"];
|
|
13
|
+
export declare type PaginationPropType = typeof paginationPropType[number];
|
|
14
|
+
export declare const paginationPropTypeDefault: PaginationPropType;
|
|
15
|
+
export declare type PaginationArrowTypes = 'first' | 'previous' | 'next' | 'last';
|
|
16
|
+
export declare type PaginationPropHotKey = {
|
|
17
|
+
label: string;
|
|
18
|
+
keys: string[];
|
|
19
|
+
};
|
|
20
|
+
export declare type PaginationPropOnItemClick<ITEM> = (item: ITEM, params: {
|
|
21
|
+
e: React.MouseEvent;
|
|
22
|
+
}) => void;
|
|
23
|
+
export declare type PaginationPropOnChange<ITEM> = (value: ITEM, params: {
|
|
24
|
+
e: React.MouseEvent | Event | React.KeyboardEvent;
|
|
25
|
+
}) => void;
|
|
26
|
+
export declare type PaginationPropArrow = boolean | IconComponent | {
|
|
27
|
+
label?: string;
|
|
28
|
+
icon?: IconComponent;
|
|
29
|
+
};
|
|
30
|
+
export declare type PaginationBasePropArrow = false | {
|
|
31
|
+
label?: string;
|
|
32
|
+
disabled?: boolean;
|
|
33
|
+
icon?: IconComponent;
|
|
34
|
+
onClick?: React.MouseEventHandler;
|
|
35
|
+
};
|
|
36
|
+
declare type PaginationArrowsProps = {
|
|
37
|
+
outerMostArrows?: [PaginationPropArrow?, PaginationPropArrow?];
|
|
38
|
+
} & ({
|
|
39
|
+
arrows: [PaginationPropArrow?, PaginationPropArrow?];
|
|
40
|
+
hotKeys?: [PaginationPropHotKey?, PaginationPropHotKey?];
|
|
41
|
+
} | {
|
|
42
|
+
arrows?: never;
|
|
43
|
+
hotKeys?: never;
|
|
44
|
+
});
|
|
45
|
+
declare type PaginationBaseArrowsProps = {
|
|
46
|
+
outerMostArrows?: [PaginationBasePropArrow?, PaginationBasePropArrow?];
|
|
47
|
+
} & ({
|
|
48
|
+
arrows: [PaginationBasePropArrow?, PaginationBasePropArrow?];
|
|
49
|
+
hotKeys?: [PaginationPropHotKey?, PaginationPropHotKey?];
|
|
50
|
+
} | {
|
|
51
|
+
arrows?: never;
|
|
52
|
+
hotKeys?: never;
|
|
53
|
+
});
|
|
54
|
+
declare type Props<ITEM> = {
|
|
55
|
+
form?: PaginationPropForm;
|
|
56
|
+
size?: PaginationPropSize;
|
|
57
|
+
containerEventListener?: HTMLElement | Window;
|
|
58
|
+
value?: ITEM;
|
|
59
|
+
items?: ITEM extends number ? number : ITEM[];
|
|
60
|
+
onChange?: PaginationPropOnChange<ITEM>;
|
|
61
|
+
};
|
|
62
|
+
export declare type PaginationProps<TYPE extends PaginationPropType> = PropsWithHTMLAttributes<{
|
|
63
|
+
type?: TYPE;
|
|
64
|
+
showFirstPage?: boolean;
|
|
65
|
+
showLastPage?: boolean;
|
|
66
|
+
visibleCount?: number;
|
|
67
|
+
} & Props<number>, HTMLDivElement> & PaginationArrowsProps & (TYPE extends 'input' ? {
|
|
68
|
+
getTotalLabel?: (pages: number) => string | number;
|
|
69
|
+
} : {
|
|
70
|
+
getTotalLabel?: never;
|
|
71
|
+
});
|
|
72
|
+
export declare type PaginationComponent = <TYPE extends PaginationPropType>(props: PaginationProps<TYPE>) => React.ReactElement | null;
|
|
73
|
+
export declare type PaginationItem = {
|
|
74
|
+
key: number;
|
|
75
|
+
label: string;
|
|
76
|
+
active?: boolean;
|
|
77
|
+
clickable?: boolean;
|
|
78
|
+
page: number;
|
|
79
|
+
};
|
|
80
|
+
export declare type PaginationBaseItemDefault = {
|
|
81
|
+
key: string | number;
|
|
82
|
+
label?: string;
|
|
83
|
+
as?: AsTags;
|
|
84
|
+
ref?: React.RefObject<HTMLElement>;
|
|
85
|
+
clickable?: boolean;
|
|
86
|
+
attributes?: AsAttributes;
|
|
87
|
+
onClick?: React.MouseEventHandler;
|
|
88
|
+
};
|
|
89
|
+
export declare type PaginationPropGetItemKey<ITEM> = (item: ITEM) => PaginationBaseItemDefault['key'];
|
|
90
|
+
export declare type PaginationPropGetItemLabel<ITEM> = (item: ITEM) => PaginationBaseItemDefault['label'];
|
|
91
|
+
export declare type PaginationPropGetItemClickable<ITEM> = (item: ITEM) => PaginationBaseItemDefault['clickable'];
|
|
92
|
+
export declare type PaginationPropGetItemAs<ITEM> = (item: ITEM) => PaginationBaseItemDefault['as'];
|
|
93
|
+
export declare type PaginationPropGetItemAttributes<ITEM> = (item: ITEM) => PaginationBaseItemDefault['attributes'];
|
|
94
|
+
export declare type PaginationPropGetItemRef<ITEM> = (item: ITEM) => PaginationBaseItemDefault['ref'];
|
|
95
|
+
export declare type PaginationPropGetItemOnClick<ITEM> = (item: ITEM) => PaginationBaseItemDefault['onClick'];
|
|
96
|
+
declare type Mappers<ITEM = PaginationBaseItemDefault> = {
|
|
97
|
+
getItemLabel?: PaginationPropGetItemLabel<ITEM>;
|
|
98
|
+
getItemKey?: PaginationPropGetItemKey<ITEM>;
|
|
99
|
+
getItemAs?: PaginationPropGetItemAs<ITEM>;
|
|
100
|
+
getItemAttributes?: PaginationPropGetItemAttributes<ITEM>;
|
|
101
|
+
getItemRef?: PaginationPropGetItemRef<ITEM>;
|
|
102
|
+
getItemClickable?: PaginationPropGetItemClickable<ITEM>;
|
|
103
|
+
getItemOnClick?: PaginationPropGetItemOnClick<ITEM>;
|
|
104
|
+
};
|
|
105
|
+
export declare type PaginationBaseProps<ITEM = PaginationBaseItemDefault> = PropsWithHTMLAttributes<Mappers<ITEM> & Props<ITEM> & PaginationBaseArrowsProps & (ITEM extends {
|
|
106
|
+
key: PaginationBaseItemDefault['key'];
|
|
107
|
+
} ? {} : {
|
|
108
|
+
getItemKey: PaginationPropGetItemKey<ITEM>;
|
|
109
|
+
}), HTMLDivElement>;
|
|
110
|
+
export declare type PaginationBaseComponent = <ITEM = PaginationBaseItemDefault>(props: PaginationBaseProps<ITEM>) => React.ReactElement | null;
|
|
111
|
+
export declare type PaginationArrowProps = PropsWithHTMLAttributes<{
|
|
112
|
+
icon?: IconComponent;
|
|
113
|
+
form?: PaginationPropForm;
|
|
114
|
+
size?: PaginationPropSize;
|
|
115
|
+
disabled?: boolean;
|
|
116
|
+
orientation?: 'start' | 'end';
|
|
117
|
+
label?: string;
|
|
118
|
+
caption?: string;
|
|
119
|
+
}, HTMLButtonElement>;
|
|
120
|
+
export declare type PaginationItemProps<AS extends AsTags = 'button'> = PropsWithAsAttributes<{
|
|
121
|
+
form?: PaginationPropForm;
|
|
122
|
+
size?: PaginationPropSize;
|
|
123
|
+
label?: string;
|
|
124
|
+
active?: boolean;
|
|
125
|
+
clickable?: boolean;
|
|
126
|
+
}, AS>;
|
|
127
|
+
export declare type PaginationItemComponent = <AS extends AsTags = 'button'>(props: PaginationItemProps<AS>) => React.ReactElement | null;
|
|
128
|
+
export declare type PaginationNumberInputProps = PropsWithHTMLAttributes<{
|
|
129
|
+
value?: number;
|
|
130
|
+
onChange?: PaginationPropOnChange<number>;
|
|
131
|
+
form?: PaginationPropForm;
|
|
132
|
+
size?: PaginationPropSize;
|
|
133
|
+
total: number;
|
|
134
|
+
getTotalLabel?: (pages: number) => string | number;
|
|
135
|
+
}, HTMLDivElement>;
|
|
136
|
+
export declare type PaginationListProps<ITEM> = PropsWithHTMLAttributesAndRef<{
|
|
137
|
+
form?: PaginationPropForm;
|
|
138
|
+
size?: PaginationPropSize;
|
|
139
|
+
items: ITEM[];
|
|
140
|
+
value?: ITEM;
|
|
141
|
+
onItemClick?: PaginationPropOnItemClick<ITEM>;
|
|
142
|
+
}, HTMLDivElement> & Mappers<ITEM> & (ITEM extends {
|
|
143
|
+
label: string;
|
|
144
|
+
} ? {} : {
|
|
145
|
+
getItemKey: PaginationPropGetItemKey<ITEM>;
|
|
146
|
+
});
|
|
147
|
+
export declare type PaginationListComponent = <ITEM extends PaginationBaseItemDefault>(props: PaginationListProps<ITEM>) => React.ReactElement | null;
|
|
148
|
+
export {};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export var paginationPropForm=["default","brick","round"];export var paginationPropFormDefault=paginationPropForm[0];export var paginationPropSize=["m","xs","s","l"];export var paginationPropSizeDefault=paginationPropSize[0];export var paginationPropType=["default","input"];export var paginationPropTypeDefault=paginationPropType[0];
|
|
2
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","names":["paginationPropForm","paginationPropFormDefault","paginationPropSize","paginationPropSizeDefault","paginationPropType","paginationPropTypeDefault"],"sources":["../../../../../src/components/PaginationCanary/types.ts"],"sourcesContent":["import { IconComponent } from '@consta/icons/Icon';\nimport React from 'react';\n\nimport { AsAttributes, AsTags } from '##/utils/types/AsTags';\nimport { PropsWithAsAttributes } from '##/utils/types/PropsWithAsAttributes';\nimport {\n PropsWithHTMLAttributes,\n PropsWithHTMLAttributesAndRef,\n} from '##/utils/types/PropsWithHTMLAttributes';\n\nexport const paginationPropForm = ['default', 'brick', 'round'] as const;\nexport type PaginationPropForm = typeof paginationPropForm[number];\nexport const paginationPropFormDefault: PaginationPropForm =\n paginationPropForm[0];\n\nexport const paginationPropSize = ['m', 'xs', 's', 'l'] as const;\nexport type PaginationPropSize = typeof paginationPropSize[number];\nexport const paginationPropSizeDefault: PaginationPropSize =\n paginationPropSize[0];\n\nexport const paginationPropType = ['default', 'input'] as const;\nexport type PaginationPropType = typeof paginationPropType[number];\nexport const paginationPropTypeDefault: PaginationPropType =\n paginationPropType[0];\n\nexport type PaginationArrowTypes = 'first' | 'previous' | 'next' | 'last';\n\nexport type PaginationPropHotKey = { label: string; keys: string[] };\n\nexport type PaginationPropOnItemClick<ITEM> = (\n item: ITEM,\n params: { e: React.MouseEvent },\n) => void;\n\nexport type PaginationPropOnChange<ITEM> = (\n value: ITEM,\n params: { e: React.MouseEvent | Event | React.KeyboardEvent },\n) => void;\n\n// ARROWS\n\nexport type PaginationPropArrow =\n | boolean\n | IconComponent\n | {\n label?: string;\n icon?: IconComponent;\n };\n\nexport type PaginationBasePropArrow =\n | false\n | {\n label?: string;\n disabled?: boolean;\n icon?: IconComponent;\n onClick?: React.MouseEventHandler;\n };\n\ntype PaginationArrowsProps = {\n outerMostArrows?: [PaginationPropArrow?, PaginationPropArrow?];\n} & (\n | {\n arrows: [PaginationPropArrow?, PaginationPropArrow?];\n hotKeys?: [PaginationPropHotKey?, PaginationPropHotKey?];\n }\n | {\n arrows?: never;\n hotKeys?: never;\n }\n);\n\ntype PaginationBaseArrowsProps = {\n outerMostArrows?: [PaginationBasePropArrow?, PaginationBasePropArrow?];\n} & (\n | {\n arrows: [PaginationBasePropArrow?, PaginationBasePropArrow?];\n hotKeys?: [PaginationPropHotKey?, PaginationPropHotKey?];\n }\n | {\n arrows?: never;\n hotKeys?: never;\n }\n);\n\ntype Props<ITEM> = {\n form?: PaginationPropForm;\n size?: PaginationPropSize;\n containerEventListener?: HTMLElement | Window;\n value?: ITEM;\n items?: ITEM extends number ? number : ITEM[];\n onChange?: PaginationPropOnChange<ITEM>;\n};\n\nexport type PaginationProps<TYPE extends PaginationPropType> =\n PropsWithHTMLAttributes<\n {\n type?: TYPE;\n showFirstPage?: boolean;\n showLastPage?: boolean;\n visibleCount?: number;\n } & Props<number>,\n HTMLDivElement\n > &\n PaginationArrowsProps &\n (TYPE extends 'input'\n ? { getTotalLabel?: (pages: number) => string | number }\n : {\n getTotalLabel?: never;\n });\n\nexport type PaginationComponent = <TYPE extends PaginationPropType>(\n props: PaginationProps<TYPE>,\n) => React.ReactElement | null;\n\nexport type PaginationItem = {\n key: number;\n label: string;\n active?: boolean;\n clickable?: boolean;\n page: number;\n};\n\nexport type PaginationBaseItemDefault = {\n key: string | number;\n label?: string;\n as?: AsTags;\n ref?: React.RefObject<HTMLElement>;\n clickable?: boolean;\n attributes?: AsAttributes;\n onClick?: React.MouseEventHandler;\n};\n\nexport type PaginationPropGetItemKey<ITEM> = (\n item: ITEM,\n) => PaginationBaseItemDefault['key'];\nexport type PaginationPropGetItemLabel<ITEM> = (\n item: ITEM,\n) => PaginationBaseItemDefault['label'];\nexport type PaginationPropGetItemClickable<ITEM> = (\n item: ITEM,\n) => PaginationBaseItemDefault['clickable'];\nexport type PaginationPropGetItemAs<ITEM> = (\n item: ITEM,\n) => PaginationBaseItemDefault['as'];\nexport type PaginationPropGetItemAttributes<ITEM> = (\n item: ITEM,\n) => PaginationBaseItemDefault['attributes'];\nexport type PaginationPropGetItemRef<ITEM> = (\n item: ITEM,\n) => PaginationBaseItemDefault['ref'];\nexport type PaginationPropGetItemOnClick<ITEM> = (\n item: ITEM,\n) => PaginationBaseItemDefault['onClick'];\n\ntype Mappers<ITEM = PaginationBaseItemDefault> = {\n getItemLabel?: PaginationPropGetItemLabel<ITEM>;\n getItemKey?: PaginationPropGetItemKey<ITEM>;\n getItemAs?: PaginationPropGetItemAs<ITEM>;\n getItemAttributes?: PaginationPropGetItemAttributes<ITEM>;\n getItemRef?: PaginationPropGetItemRef<ITEM>;\n getItemClickable?: PaginationPropGetItemClickable<ITEM>;\n getItemOnClick?: PaginationPropGetItemOnClick<ITEM>;\n};\n\nexport type PaginationBaseProps<ITEM = PaginationBaseItemDefault> =\n PropsWithHTMLAttributes<\n Mappers<ITEM> &\n Props<ITEM> &\n PaginationBaseArrowsProps &\n (ITEM extends { key: PaginationBaseItemDefault['key'] }\n ? {}\n : {\n getItemKey: PaginationPropGetItemKey<ITEM>;\n }),\n HTMLDivElement\n >;\n\nexport type PaginationBaseComponent = <ITEM = PaginationBaseItemDefault>(\n props: PaginationBaseProps<ITEM>,\n) => React.ReactElement | null;\n\nexport type PaginationArrowProps = PropsWithHTMLAttributes<\n {\n icon?: IconComponent;\n form?: PaginationPropForm;\n size?: PaginationPropSize;\n disabled?: boolean;\n orientation?: 'start' | 'end';\n label?: string;\n caption?: string;\n },\n HTMLButtonElement\n>;\n\nexport type PaginationItemProps<AS extends AsTags = 'button'> =\n PropsWithAsAttributes<\n {\n form?: PaginationPropForm;\n size?: PaginationPropSize;\n label?: string;\n active?: boolean;\n clickable?: boolean;\n },\n AS\n >;\n\nexport type PaginationItemComponent = <AS extends AsTags = 'button'>(\n props: PaginationItemProps<AS>,\n) => React.ReactElement | null;\n\nexport type PaginationNumberInputProps = PropsWithHTMLAttributes<\n {\n value?: number;\n onChange?: PaginationPropOnChange<number>;\n form?: PaginationPropForm;\n size?: PaginationPropSize;\n total: number;\n getTotalLabel?: (pages: number) => string | number;\n },\n HTMLDivElement\n>;\n\nexport type PaginationListProps<ITEM> = PropsWithHTMLAttributesAndRef<\n {\n form?: PaginationPropForm;\n size?: PaginationPropSize;\n items: ITEM[];\n value?: ITEM;\n onItemClick?: PaginationPropOnItemClick<ITEM>;\n },\n HTMLDivElement\n> &\n Mappers<ITEM> &\n (ITEM extends { label: string }\n ? {}\n : {\n getItemKey: PaginationPropGetItemKey<ITEM>;\n });\n\nexport type PaginationListComponent = <ITEM extends PaginationBaseItemDefault>(\n props: PaginationListProps<ITEM>,\n) => React.ReactElement | null;\n"],"mappings":"AAUA,MAAO,IAAMA,mBAAkB,CAAG,CAAC,SAAD,CAAY,OAAZ,CAAqB,OAArB,CAA3B,CAEP,MAAO,IAAMC,0BAA6C,CACxDD,kBAAkB,CAAC,CAAD,CADb,CAGP,MAAO,IAAME,mBAAkB,CAAG,CAAC,GAAD,CAAM,IAAN,CAAY,GAAZ,CAAiB,GAAjB,CAA3B,CAEP,MAAO,IAAMC,0BAA6C,CACxDD,kBAAkB,CAAC,CAAD,CADb,CAGP,MAAO,IAAME,mBAAkB,CAAG,CAAC,SAAD,CAAY,OAAZ,CAA3B,CAEP,MAAO,IAAMC,0BAA6C,CACxDD,kBAAkB,CAAC,CAAD,CADb"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
import { PaginationItem, PaginationPropHotKey, PaginationPropSize } from './types';
|
|
3
|
+
declare type UsePaginationItemsProps = {
|
|
4
|
+
visibleCount?: number;
|
|
5
|
+
value: number;
|
|
6
|
+
items: number;
|
|
7
|
+
showFirstPage?: boolean;
|
|
8
|
+
showLastPage?: boolean;
|
|
9
|
+
containerEventListener?: HTMLElement | Window;
|
|
10
|
+
size: PaginationPropSize;
|
|
11
|
+
hotKeys?: [PaginationPropHotKey?, PaginationPropHotKey?];
|
|
12
|
+
};
|
|
13
|
+
export declare const itemSizeMap: Record<PaginationPropSize, number>;
|
|
14
|
+
export declare const usePaginationItems: (props: UsePaginationItemsProps) => {
|
|
15
|
+
buttonRefs: import("react").RefObject<HTMLButtonElement>[];
|
|
16
|
+
wrapperRef: import("react").RefObject<HTMLDivElement>;
|
|
17
|
+
pages: PaginationItem[];
|
|
18
|
+
};
|
|
19
|
+
export {};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import _slicedToArray from"@babel/runtime/helpers/slicedToArray";import{useEffect,useRef,useState}from"react";import{useComponentSize}from"../../hooks/useComponentSize";import{useRefs}from"../../hooks/useRefs";import{useResizeObserved}from"../../hooks/useResizeObserved";import{getPagesArray}from"./helpers";import{usePaginationKeys}from"./usePaginationKeys";export var itemSizeMap={l:48,m:40,s:32,xs:24};var getElementSize=function(a){var b;return null!==(b=null===a||void 0===a?void 0:a.offsetWidth)&&void 0!==b?b:0};export var usePaginationItems=function(a){var b=a.visibleCount,c=a.value,d=a.items,e=a.showFirstPage,f=a.showLastPage,g=a.containerEventListener,h=a.size,i=a.hotKeys,j=useState([]),k=_slicedToArray(j,2),l=k[0],m=k[1],n=useState(7),o=_slicedToArray(n,2),p=o[0],q=o[1],r=useRef(null),s=useRefs(4),t=useResizeObserved(s,getElementSize),u=_slicedToArray(t,4),v=u[0],w=u[1],x=u[2],y=u[3];usePaginationKeys({containerEventListener:g,hotKeys:i,prevButtonRef:s[1],nextButtonRef:s[2]});var z=useComponentSize(r),A=z.width;return useEffect(function(){q(Math.max(Math.floor((A-v-w-x-y)/(itemSizeMap[h]+2)),3+(e?2:0)+(f?2:0)))},[l,v,w,x,y,A,h]),useEffect(function(){m(getPagesArray({currentPage:c,totalPages:d,visibleCount:null!==b&&void 0!==b?b:p,showFirstPage:e,showLastPage:f}))},[b,e,f,c,d,p]),{buttonRefs:s,wrapperRef:r,pages:l}};
|
|
2
|
+
//# sourceMappingURL=usePaginationItems.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"usePaginationItems.js","names":["useEffect","useRef","useState","useComponentSize","useRefs","useResizeObserved","getPagesArray","usePaginationKeys","itemSizeMap","l","m","s","xs","getElementSize","el","offsetWidth","usePaginationItems","props","visibleCount","value","items","showFirstPage","showLastPage","containerEventListener","size","hotKeys","pages","setPages","maxVisiblePages","setMaxVisiblePages","wrapperRef","refs","firstWidth","prevWidth","nextWidth","lastWidth","prevButtonRef","nextButtonRef","width","Math","max","floor","currentPage","totalPages","buttonRefs"],"sources":["../../../../../src/components/PaginationCanary/usePaginationItems.tsx"],"sourcesContent":["import { useEffect, useRef, useState } from 'react';\n\nimport { useComponentSize } from '##/hooks/useComponentSize';\nimport { useRefs } from '##/hooks/useRefs';\nimport { useResizeObserved } from '##/hooks/useResizeObserved';\n\nimport { getPagesArray } from './helpers';\nimport {\n PaginationItem,\n PaginationPropHotKey,\n PaginationPropSize,\n} from './types';\nimport { usePaginationKeys } from './usePaginationKeys';\n\ntype UsePaginationItemsProps = {\n visibleCount?: number;\n value: number;\n items: number;\n showFirstPage?: boolean;\n showLastPage?: boolean;\n containerEventListener?: HTMLElement | Window;\n size: PaginationPropSize;\n hotKeys?: [PaginationPropHotKey?, PaginationPropHotKey?];\n};\n\nexport const itemSizeMap: Record<PaginationPropSize, number> = {\n l: 48,\n m: 40,\n s: 32,\n xs: 24,\n};\n\nconst getElementSize = (el: HTMLElement | null) => el?.offsetWidth ?? 0;\n\nexport const usePaginationItems = (props: UsePaginationItemsProps) => {\n const {\n visibleCount,\n value,\n items,\n showFirstPage,\n showLastPage,\n containerEventListener,\n size,\n hotKeys,\n } = props;\n const [pages, setPages] = useState<PaginationItem[]>([]);\n const [maxVisiblePages, setMaxVisiblePages] = useState(7);\n\n const wrapperRef = useRef<HTMLDivElement>(null);\n const refs = useRefs<HTMLButtonElement>(4);\n\n const [firstWidth, prevWidth, nextWidth, lastWidth] = useResizeObserved(\n refs,\n getElementSize,\n );\n\n usePaginationKeys({\n containerEventListener,\n hotKeys,\n prevButtonRef: refs[1],\n nextButtonRef: refs[2],\n });\n\n const { width } = useComponentSize(wrapperRef);\n\n useEffect(() => {\n setMaxVisiblePages(\n Math.max(\n Math.floor(\n (width - firstWidth - prevWidth - nextWidth - lastWidth) /\n (itemSizeMap[size] + 2),\n ),\n 3 + (showFirstPage ? 2 : 0) + (showLastPage ? 2 : 0),\n ),\n );\n }, [pages, firstWidth, prevWidth, nextWidth, lastWidth, width, size]);\n\n useEffect(() => {\n setPages(\n getPagesArray({\n currentPage: value,\n totalPages: items,\n visibleCount: visibleCount ?? maxVisiblePages,\n showFirstPage,\n showLastPage,\n }),\n );\n }, [\n visibleCount,\n showFirstPage,\n showLastPage,\n value,\n items,\n maxVisiblePages,\n ]);\n\n return {\n buttonRefs: refs,\n wrapperRef,\n pages,\n };\n};\n"],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
import { PaginationPropHotKey } from './types';
|
|
3
|
+
declare type UsePaginationKeysParams = {
|
|
4
|
+
containerEventListener?: HTMLElement | Window;
|
|
5
|
+
hotKeys?: [PaginationPropHotKey?, PaginationPropHotKey?];
|
|
6
|
+
nextButtonRef?: React.RefObject<HTMLElement>;
|
|
7
|
+
prevButtonRef?: React.RefObject<HTMLElement>;
|
|
8
|
+
};
|
|
9
|
+
export declare const usePaginationKeys: (params: UsePaginationKeysParams) => void;
|
|
10
|
+
export {};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import _toConsumableArray from"@babel/runtime/helpers/toConsumableArray";import _slicedToArray from"@babel/runtime/helpers/slicedToArray";import{useCallback,useEffect,useLayoutEffect,useRef}from"react";export var usePaginationKeys=function(a){var b=a.containerEventListener,c=void 0===b?window:b,d=a.hotKeys,e=a.nextButtonRef,f=a.prevButtonRef,g=useRef([]),h=useRef(null!==d&&void 0!==d?d:[]),i=function(a){var b=a.key;g.current=g.current.filter(function(a){return a!==b})},j=useCallback(function(a){var b=a.key,c=_slicedToArray(h.current,2),d=c[0],i=c[1];if(null!==d&&void 0!==d&&d.keys.includes(b)||null!==i&&void 0!==i&&i.keys.includes(b)){var l=[].concat(_toConsumableArray(g.current),[b]);if(null!==i&&void 0!==i&&i.keys.every(function(a){return l.includes(a)})){var j;null===e||void 0===e||null===(j=e.current)||void 0===j?void 0:j.click()}else if(null!==d&&void 0!==d&&d.keys.every(function(a){return l.includes(a)})){var k;null===f||void 0===f||null===(k=f.current)||void 0===k?void 0:k.click()}g.current=l}},[d]);useLayoutEffect(function(){return c.addEventListener("keydown",j),c.addEventListener("keyup",i),function(){c.removeEventListener("keydown",j),c.removeEventListener("keyup",i)}},[e,f,c]),useEffect(function(){d&&(h.current=d)},[d])};
|
|
2
|
+
//# sourceMappingURL=usePaginationKeys.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"usePaginationKeys.js","names":["useCallback","useEffect","useLayoutEffect","useRef","usePaginationKeys","params","containerEventListener","window","hotKeys","nextButtonRef","prevButtonRef","keys","hotKeysRef","keyUpListener","event","key","current","filter","hotKey","keyDownListener","start","end","includes","newKeys","every","click","addEventListener","removeEventListener"],"sources":["../../../../../src/components/PaginationCanary/usePaginationKeys.tsx"],"sourcesContent":["import { useCallback, useEffect, useLayoutEffect, useRef } from 'react';\n\nimport { PaginationPropHotKey } from './types';\n\ntype UsePaginationKeysParams = {\n containerEventListener?: HTMLElement | Window;\n hotKeys?: [PaginationPropHotKey?, PaginationPropHotKey?];\n nextButtonRef?: React.RefObject<HTMLElement>;\n prevButtonRef?: React.RefObject<HTMLElement>;\n};\n\nexport const usePaginationKeys = (params: UsePaginationKeysParams) => {\n const {\n containerEventListener = window,\n hotKeys,\n nextButtonRef,\n prevButtonRef,\n } = params;\n const keys: React.MutableRefObject<string[]> = useRef([]);\n const hotKeysRef = useRef(hotKeys ?? []);\n\n const keyUpListener: EventListener = (event) => {\n const { key } = event as KeyboardEvent;\n keys.current = keys.current.filter((hotKey) => hotKey !== key);\n };\n\n const keyDownListener: EventListener = useCallback(\n (event) => {\n const { key } = event as KeyboardEvent;\n\n const [start, end] = hotKeysRef.current;\n\n if (start?.keys.includes(key) || end?.keys.includes(key)) {\n const newKeys = [...keys.current, key];\n if (end?.keys.every((hotKey) => newKeys.includes(hotKey))) {\n nextButtonRef?.current?.click();\n } else if (start?.keys.every((hotKey) => newKeys.includes(hotKey))) {\n prevButtonRef?.current?.click();\n }\n keys.current = newKeys;\n }\n },\n [hotKeys],\n );\n\n useLayoutEffect(() => {\n containerEventListener.addEventListener('keydown', keyDownListener);\n containerEventListener.addEventListener('keyup', keyUpListener);\n return () => {\n containerEventListener.removeEventListener('keydown', keyDownListener);\n containerEventListener.removeEventListener('keyup', keyUpListener);\n };\n }, [nextButtonRef, prevButtonRef, containerEventListener]);\n\n useEffect(() => {\n if (hotKeys) {\n hotKeysRef.current = hotKeys;\n }\n }, [hotKeys]);\n};\n"],"mappings":"0IAAA,OAASA,WAAT,CAAsBC,SAAtB,CAAiCC,eAAjC,CAAkDC,MAAlD,KAAgE,OAAhE,CAWA,MAAO,IAAMC,kBAAiB,CAAG,SAACC,CAAD,CAAqC,OAMhEA,CANgE,CAElEC,sBAFkE,CAElEA,CAFkE,YAEzCC,MAFyC,GAGlEC,CAHkE,CAMhEH,CANgE,CAGlEG,OAHkE,CAIlEC,CAJkE,CAMhEJ,CANgE,CAIlEI,aAJkE,CAKlEC,CALkE,CAMhEL,CANgE,CAKlEK,aALkE,CAO9DC,CAAsC,CAAGR,MAAM,CAAC,EAAD,CAPe,CAQ9DS,CAAU,CAAGT,MAAM,QAACK,CAAD,WAACA,CAAD,CAACA,CAAD,CAAY,EAAZ,CAR2C,CAU9DK,CAA4B,CAAG,SAACC,CAAD,CAAW,CAC9C,GAAQC,EAAR,CAAgBD,CAAhB,CAAQC,GAAR,CACAJ,CAAI,CAACK,OAAL,CAAeL,CAAI,CAACK,OAAL,CAAaC,MAAb,CAAoB,SAACC,CAAD,QAAYA,EAAM,GAAKH,CAAvB,CAApB,CAChB,CAbmE,CAe9DI,CAA8B,CAAGnB,WAAW,CAChD,SAACc,CAAD,CAAW,IACDC,EADC,CACOD,CADP,CACDC,GADC,kBAGYH,CAAU,CAACI,OAHvB,IAGFI,CAHE,MAGKC,CAHL,MAKT,GAAI,OAAAD,CAAK,WAALA,CAAA,EAAAA,CAAK,CAAET,IAAP,CAAYW,QAAZ,CAAqBP,CAArB,UAA6BM,CAA7B,WAA6BA,CAA7B,EAA6BA,CAAG,CAAEV,IAAL,CAAUW,QAAV,CAAmBP,CAAnB,CAAjC,CAA0D,CACxD,GAAMQ,EAAO,8BAAOZ,CAAI,CAACK,OAAZ,GAAqBD,CAArB,EAAb,CACA,UAAIM,CAAJ,WAAIA,CAAJ,EAAIA,CAAG,CAAEV,IAAL,CAAUa,KAAV,CAAgB,SAACN,CAAD,QAAYK,EAAO,CAACD,QAAR,CAAiBJ,CAAjB,CAAZ,CAAhB,CAAJ,CAA2D,cACzDT,CADyD,WACzDA,CADyD,YACzDA,CAAa,CAAEO,OAD0C,qBACzD,EAAwBS,KAAxB,EACD,CAFD,IAEO,WAAIL,CAAJ,WAAIA,CAAJ,EAAIA,CAAK,CAAET,IAAP,CAAYa,KAAZ,CAAkB,SAACN,CAAD,QAAYK,EAAO,CAACD,QAAR,CAAiBJ,CAAjB,CAAZ,CAAlB,CAAJ,CAA6D,cAClER,CADkE,WAClEA,CADkE,YAClEA,CAAa,CAAEM,OADmD,qBAClE,EAAwBS,KAAxB,EACD,CACDd,CAAI,CAACK,OAAL,CAAeO,CAChB,CACF,CAf+C,CAgBhD,CAACf,CAAD,CAhBgD,CAfkB,CAkCpEN,eAAe,CAAC,UAAM,CAGpB,MAFAI,EAAsB,CAACoB,gBAAvB,CAAwC,SAAxC,CAAmDP,CAAnD,CAEA,CADAb,CAAsB,CAACoB,gBAAvB,CAAwC,OAAxC,CAAiDb,CAAjD,CACA,CAAO,UAAM,CACXP,CAAsB,CAACqB,mBAAvB,CAA2C,SAA3C,CAAsDR,CAAtD,CADW,CAEXb,CAAsB,CAACqB,mBAAvB,CAA2C,OAA3C,CAAoDd,CAApD,CACD,CACF,CAPc,CAOZ,CAACJ,CAAD,CAAgBC,CAAhB,CAA+BJ,CAA/B,CAPY,CAlCqD,CA2CpEL,SAAS,CAAC,UAAM,CACVO,CADU,GAEZI,CAAU,CAACI,OAAX,CAAqBR,CAFT,CAIf,CAJQ,CAIN,CAACA,CAAD,CAJM,CAKV,CAhDM"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import _objectWithoutProperties from"@babel/runtime/helpers/objectWithoutProperties";var _excluded=["item","attributes","as"],_excluded2=["size","className","items","view","value","linePosition","fitMode","onlyIcon","getItemIcon","getItemAs","getItemAttributes","getItemRef","getItemLabel","onChange","iconSize","renderItem","getItemLeftIcon","getItemLeftSide","getItemRightIcon","getItemRightSide","getItemDisabled","disabled"];import"./Tabs.css";import React,{forwardRef}from"react";import{useRefs}from"../../hooks/useRefs";import{useChoiceGroup}from"../../hooks/useChoiceGroup/useChoiceGroup";import{useResizeObserved}from"../../hooks/useResizeObserved/useResizeObserved";import{cn}from"../../utils/bem";import{getTabsDirection,getTabsWrapper,withDefaultGetters}from"./helpers";import{TabsBorderLine,TabsRunningLine}from"./
|
|
1
|
+
import _objectWithoutProperties from"@babel/runtime/helpers/objectWithoutProperties";var _excluded=["item","attributes","as"],_excluded2=["size","className","items","view","value","linePosition","fitMode","onlyIcon","getItemIcon","getItemAs","getItemAttributes","getItemRef","getItemLabel","onChange","iconSize","renderItem","getItemLeftIcon","getItemLeftSide","getItemRightIcon","getItemRightSide","getItemDisabled","disabled"];import"./Tabs.css";import React,{forwardRef}from"react";import{useRefs}from"../../hooks/useRefs";import{useChoiceGroup}from"../../hooks/useChoiceGroup/useChoiceGroup";import{useResizeObserved}from"../../hooks/useResizeObserved/useResizeObserved";import{cn}from"../../utils/bem";import{getTabsDirection,getTabsWrapper,withDefaultGetters}from"./helpers";import{TabsBorderLine,TabsRunningLine}from"./TabsLine/TabsLine";import{TabsTab}from"./TabsTab/TabsTab";import{tabsDefaultFitMode,tabsDefaultLinePosition,tabsDefaultSize,tabsDefaultView}from"./types";export var cnTabs=cn("Tabs");function renderItemDefault(a){var b=a.item,c=a.attributes,d=void 0===c?{}:c,e=a.as,f=_objectWithoutProperties(a,_excluded);return React.createElement(TabsTab,Object.assign({},d,f,{as:e}))}var TabsRender=function(a,b){var c=withDefaultGetters(a),d=c.size,e=void 0===d?tabsDefaultSize:d,f=c.className,g=c.items,h=c.view,i=void 0===h?tabsDefaultView:h,j=c.value,k=c.linePosition,l=void 0===k?tabsDefaultLinePosition:k,m=c.fitMode,n=void 0===m?tabsDefaultFitMode:m,o=c.onlyIcon,p=c.getItemIcon,q=c.getItemAs,r=c.getItemAttributes,s=c.getItemRef,t=c.getItemLabel,u=c.onChange,v=c.iconSize,w=c.renderItem,x=void 0===w?renderItemDefault:w,y=c.getItemLeftIcon,z=c.getItemLeftSide,A=c.getItemRightIcon,B=c.getItemRightSide,C=c.getItemDisabled,D=c.disabled,E=_objectWithoutProperties(c,_excluded2),F=useChoiceGroup({value:j||null,getKey:t,callBack:u,multiple:!1}),G=F.getOnChange,H=F.getChecked,I=getTabsDirection(l),J="vertical"===I,K=useRefs(g.length,[g.length,n,J]),L=useResizeObserved(K,function(a){var b;return{size:null!==(b=null===a||void 0===a?void 0:a[J?"offsetHeight":"offsetWidth"])&&void 0!==b?b:0,gap:a?parseInt(getComputedStyle(a)[J?"marginBottom":"marginRight"],10):0}}),M=g.findIndex(H),N=function(a,b,c){return x({item:a,onChange:function(){null===b||void 0===b?void 0:b(),G(a).apply(void 0,arguments)},checked:H(a),label:t(a).toString(),icon:p(a),leftIcon:y(a),rightIcon:A(a),leftSide:z(a),rightSide:B(a),disabled:D||C(a),onlyIcon:o,size:e,iconSize:v,renderInDropdown:c,as:q(a)||"button",tabRef:s(a),attributes:r(a)})},O=getTabsWrapper(I,n);return g.length?React.createElement("div",Object.assign({className:cnTabs({size:e,view:i,direction:I},[f]),ref:b},E),React.createElement(O,{tabRefs:K,onChange:u,tabsDimensions:L,renderItem:N,renderItemsList:function renderItemsList(a){var b=a.withRunningLine,c=a.visibleIndexes,d=a.getTabClassName;return React.createElement("div",{className:cnTabs("List",{direction:I,linePosition:l})},g.map(function(a,b){return React.createElement("div",{ref:K[b],key:t(a),className:cnTabs("Tab",{direction:I},[null===d||void 0===d?void 0:d(b)])},N(a))}),(!(void 0!==b)||b)&&!D&&React.createElement(TabsRunningLine,{visibleIndexes:c,linePosition:l,tabsDimensions:L,activeTabIdx:M}))},getItemLabel:t,getItemChecked:H,items:g,size:e}),"bordered"===i&&React.createElement(TabsBorderLine,{linePosition:l})):null};export var Tabs=forwardRef(TabsRender);export*from"./types";
|
|
2
2
|
//# sourceMappingURL=Tabs.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Tabs.js","names":["React","forwardRef","useRefs","useChoiceGroup","useResizeObserved","cn","getTabsDirection","getTabsWrapper","withDefaultGetters","TabsBorderLine","TabsRunningLine","TabsTab","tabsDefaultFitMode","tabsDefaultLinePosition","tabsDefaultSize","tabsDefaultView","cnTabs","renderItemDefault","props","item","attributes","as","otherProps","TabsRender","ref","size","className","items","view","value","linePosition","fitMode","onlyIcon","getItemIcon","getItemAs","getItemAttributes","getItemRef","getItemLabel","onChange","iconSize","renderItem","renderItemProp","getItemLeftIcon","getItemLeftSide","getItemRightIcon","getItemRightSide","getItemDisabled","disabled","getKey","callBack","multiple","getOnChange","getChecked","tabsDirection","isVertical","tabRefs","length","tabsDimensions","el","gap","parseInt","getComputedStyle","activeTabIdx","findIndex","onClick","renderInDropdown","checked","label","toString","icon","leftIcon","rightIcon","leftSide","rightSide","tabRef","Wrapper","direction","renderItemsList","withRunningLine","visibleIndexes","getTabClassName","map","idx","Tabs"],"sources":["../../../../../src/components/Tabs/Tabs.tsx"],"sourcesContent":["import './Tabs.css';\n\nimport React, { forwardRef } from 'react';\n\nimport { useRefs } from '##/hooks/useRefs';\n\nimport { useChoiceGroup } from '../../hooks/useChoiceGroup/useChoiceGroup';\nimport { useResizeObserved } from '../../hooks/useResizeObserved/useResizeObserved';\nimport { cn } from '../../utils/bem';\nimport {\n getTabsDirection,\n getTabsWrapper,\n withDefaultGetters,\n} from './helpers';\nimport { TabsBorderLine, TabsRunningLine } from './Line/TabsLine';\nimport { TabsTab } from './Tab/TabsTab';\nimport {\n RenderItemProps,\n RenderItemsListProp,\n TabDimensions,\n TabsComponent,\n tabsDefaultFitMode,\n tabsDefaultLinePosition,\n tabsDefaultSize,\n tabsDefaultView,\n TabsProps,\n} from './types';\n\nexport const cnTabs = cn('Tabs');\n\nfunction renderItemDefault<ITEM>(\n props: RenderItemProps<ITEM>,\n): React.ReactElement {\n const { item, attributes = {}, as, ...otherProps } = props;\n return <TabsTab {...attributes} {...otherProps} as={as} />;\n}\n\nconst TabsRender = (props: TabsProps, ref: React.Ref<HTMLDivElement>) => {\n const {\n size = tabsDefaultSize,\n className,\n items,\n view = tabsDefaultView,\n value,\n linePosition = tabsDefaultLinePosition,\n fitMode = tabsDefaultFitMode,\n onlyIcon,\n getItemIcon,\n getItemAs,\n getItemAttributes,\n getItemRef,\n getItemLabel,\n onChange,\n iconSize,\n renderItem: renderItemProp = renderItemDefault,\n getItemLeftIcon,\n getItemLeftSide,\n getItemRightIcon,\n getItemRightSide,\n getItemDisabled,\n disabled,\n ...otherProps\n } = withDefaultGetters(props);\n\n const { getOnChange, getChecked } = useChoiceGroup({\n value: value || null,\n getKey: getItemLabel,\n callBack: onChange,\n multiple: false,\n });\n\n const tabsDirection = getTabsDirection(linePosition);\n const isVertical = tabsDirection === 'vertical';\n const tabRefs = useRefs<HTMLDivElement>(items.length, [\n items,\n fitMode,\n isVertical,\n ]);\n\n const tabsDimensions = useResizeObserved(\n tabRefs,\n (el): TabDimensions => ({\n size: el?.[isVertical ? 'offsetHeight' : 'offsetWidth'] ?? 0,\n gap: el\n ? parseInt(\n getComputedStyle(el)[isVertical ? 'marginBottom' : 'marginRight'],\n 10,\n )\n : 0,\n }),\n );\n\n const activeTabIdx = items.findIndex(getChecked);\n\n const renderItem = (\n item: typeof items[number],\n onClick?: () => void,\n renderInDropdown?: boolean,\n ) =>\n renderItemProp({\n item,\n onChange: (...args) => {\n onClick?.();\n getOnChange(item)(...args);\n },\n checked: getChecked(item),\n label: getItemLabel(item).toString(),\n icon: getItemIcon(item),\n leftIcon: getItemLeftIcon(item),\n rightIcon: getItemRightIcon(item),\n leftSide: getItemLeftSide(item),\n rightSide: getItemRightSide(item),\n disabled: disabled || getItemDisabled(item),\n onlyIcon,\n size,\n iconSize,\n renderInDropdown,\n as: getItemAs(item) || 'button',\n tabRef: getItemRef(item),\n attributes: getItemAttributes(item),\n });\n\n const renderItemsList: RenderItemsListProp = ({\n withRunningLine = true,\n visibleIndexes,\n getTabClassName,\n }) => (\n <div className={cnTabs('List', { direction: tabsDirection, linePosition })}>\n {items.map((item, idx) => (\n <div\n ref={tabRefs[idx]}\n key={getItemLabel(item)}\n className={cnTabs('Tab', { direction: tabsDirection }, [\n getTabClassName?.(idx),\n ])}\n >\n {renderItem(item)}\n </div>\n ))}\n {withRunningLine && !disabled && (\n <TabsRunningLine\n visibleIndexes={visibleIndexes}\n linePosition={linePosition}\n tabsDimensions={tabsDimensions}\n activeTabIdx={activeTabIdx}\n />\n )}\n </div>\n );\n\n const Wrapper = getTabsWrapper(tabsDirection, fitMode);\n\n return (\n <div\n className={cnTabs({ size, view, direction: tabsDirection }, [className])}\n ref={ref}\n {...otherProps}\n >\n <Wrapper\n tabRefs={tabRefs}\n tabsDimensions={tabsDimensions}\n renderItem={renderItem}\n renderItemsList={renderItemsList}\n getItemLabel={getItemLabel}\n getItemChecked={getChecked}\n items={items}\n size={size}\n />\n {view === 'bordered' && <TabsBorderLine linePosition={linePosition} />}\n </div>\n );\n};\n\nexport const Tabs = forwardRef(TabsRender) as TabsComponent;\n\nexport * from './types';\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Tabs.js","names":["React","forwardRef","useRefs","useChoiceGroup","useResizeObserved","cn","getTabsDirection","getTabsWrapper","withDefaultGetters","TabsBorderLine","TabsRunningLine","TabsTab","tabsDefaultFitMode","tabsDefaultLinePosition","tabsDefaultSize","tabsDefaultView","cnTabs","renderItemDefault","props","item","attributes","as","otherProps","TabsRender","ref","size","className","items","view","value","linePosition","fitMode","onlyIcon","getItemIcon","getItemAs","getItemAttributes","getItemRef","getItemLabel","onChange","iconSize","renderItem","renderItemProp","getItemLeftIcon","getItemLeftSide","getItemRightIcon","getItemRightSide","getItemDisabled","disabled","getKey","callBack","multiple","getOnChange","getChecked","tabsDirection","isVertical","tabRefs","length","tabsDimensions","el","gap","parseInt","getComputedStyle","activeTabIdx","findIndex","onClick","renderInDropdown","checked","label","toString","icon","leftIcon","rightIcon","leftSide","rightSide","tabRef","Wrapper","direction","renderItemsList","withRunningLine","visibleIndexes","getTabClassName","map","idx","Tabs"],"sources":["../../../../../src/components/Tabs/Tabs.tsx"],"sourcesContent":["import './Tabs.css';\n\nimport React, { forwardRef } from 'react';\n\nimport { useRefs } from '##/hooks/useRefs';\n\nimport { useChoiceGroup } from '../../hooks/useChoiceGroup/useChoiceGroup';\nimport { useResizeObserved } from '../../hooks/useResizeObserved/useResizeObserved';\nimport { cn } from '../../utils/bem';\nimport {\n getTabsDirection,\n getTabsWrapper,\n withDefaultGetters,\n} from './helpers';\nimport { TabsBorderLine, TabsRunningLine } from './TabsLine/TabsLine';\nimport { TabsTab } from './TabsTab/TabsTab';\nimport {\n RenderItemProps,\n RenderItemsListProp,\n TabDimensions,\n TabsComponent,\n tabsDefaultFitMode,\n tabsDefaultLinePosition,\n tabsDefaultSize,\n tabsDefaultView,\n TabsProps,\n} from './types';\n\nexport const cnTabs = cn('Tabs');\n\nfunction renderItemDefault<ITEM>(\n props: RenderItemProps<ITEM>,\n): React.ReactElement {\n const { item, attributes = {}, as, ...otherProps } = props;\n return <TabsTab {...attributes} {...otherProps} as={as} />;\n}\n\nconst TabsRender = (props: TabsProps, ref: React.Ref<HTMLDivElement>) => {\n const {\n size = tabsDefaultSize,\n className,\n items,\n view = tabsDefaultView,\n value,\n linePosition = tabsDefaultLinePosition,\n fitMode = tabsDefaultFitMode,\n onlyIcon,\n getItemIcon,\n getItemAs,\n getItemAttributes,\n getItemRef,\n getItemLabel,\n onChange,\n iconSize,\n renderItem: renderItemProp = renderItemDefault,\n getItemLeftIcon,\n getItemLeftSide,\n getItemRightIcon,\n getItemRightSide,\n getItemDisabled,\n disabled,\n ...otherProps\n } = withDefaultGetters(props);\n\n const { getOnChange, getChecked } = useChoiceGroup({\n value: value || null,\n getKey: getItemLabel,\n callBack: onChange,\n multiple: false,\n });\n\n const tabsDirection = getTabsDirection(linePosition);\n const isVertical = tabsDirection === 'vertical';\n const tabRefs = useRefs<HTMLDivElement>(items.length, [\n items.length,\n fitMode,\n isVertical,\n ]);\n\n const tabsDimensions = useResizeObserved(\n tabRefs,\n (el): TabDimensions => ({\n size: el?.[isVertical ? 'offsetHeight' : 'offsetWidth'] ?? 0,\n gap: el\n ? parseInt(\n getComputedStyle(el)[isVertical ? 'marginBottom' : 'marginRight'],\n 10,\n )\n : 0,\n }),\n );\n\n const activeTabIdx = items.findIndex(getChecked);\n\n const renderItem = (\n item: typeof items[number],\n onClick?: () => void,\n renderInDropdown?: boolean,\n ) =>\n renderItemProp({\n item,\n onChange: (...args) => {\n onClick?.();\n getOnChange(item)(...args);\n },\n checked: getChecked(item),\n label: getItemLabel(item).toString(),\n icon: getItemIcon(item),\n leftIcon: getItemLeftIcon(item),\n rightIcon: getItemRightIcon(item),\n leftSide: getItemLeftSide(item),\n rightSide: getItemRightSide(item),\n disabled: disabled || getItemDisabled(item),\n onlyIcon,\n size,\n iconSize,\n renderInDropdown,\n as: getItemAs(item) || 'button',\n tabRef: getItemRef(item),\n attributes: getItemAttributes(item),\n });\n\n const renderItemsList: RenderItemsListProp = ({\n withRunningLine = true,\n visibleIndexes,\n getTabClassName,\n }) => (\n <div className={cnTabs('List', { direction: tabsDirection, linePosition })}>\n {items.map((item, idx) => (\n <div\n ref={tabRefs[idx]}\n key={getItemLabel(item)}\n className={cnTabs('Tab', { direction: tabsDirection }, [\n getTabClassName?.(idx),\n ])}\n >\n {renderItem(item)}\n </div>\n ))}\n {withRunningLine && !disabled && (\n <TabsRunningLine\n visibleIndexes={visibleIndexes}\n linePosition={linePosition}\n tabsDimensions={tabsDimensions}\n activeTabIdx={activeTabIdx}\n />\n )}\n </div>\n );\n\n const Wrapper = getTabsWrapper(tabsDirection, fitMode);\n\n if (!items.length) {\n return null;\n }\n\n return (\n <div\n className={cnTabs({ size, view, direction: tabsDirection }, [className])}\n ref={ref}\n {...otherProps}\n >\n <Wrapper\n tabRefs={tabRefs}\n onChange={onChange}\n tabsDimensions={tabsDimensions}\n renderItem={renderItem}\n renderItemsList={renderItemsList}\n getItemLabel={getItemLabel}\n getItemChecked={getChecked}\n items={items}\n size={size}\n />\n {view === 'bordered' && <TabsBorderLine linePosition={linePosition} />}\n </div>\n );\n};\n\nexport const Tabs = forwardRef(TabsRender) as TabsComponent;\n\nexport * from './types';\n"],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import './TabsFitModeDropdownWrapper.css';
|
|
2
2
|
import React from 'react';
|
|
3
3
|
import { TabsFitModeWrapperProps } from '../types';
|
|
4
|
-
export declare const TabsFitModeDropdownWrapper: <ITEM>({ items, tabsDimensions, tabRefs, getItemLabel, getItemChecked, renderItem, renderItemsList, size, }: TabsFitModeWrapperProps<ITEM>) => React.ReactElement | null;
|
|
4
|
+
export declare const TabsFitModeDropdownWrapper: <ITEM>({ items, tabsDimensions, tabRefs, getItemLabel, getItemChecked, renderItem, onChange, renderItemsList, size, }: TabsFitModeWrapperProps<ITEM>) => React.ReactElement | null;
|
package/__internal__/src/components/Tabs/TabsFitModeDropdownWrapper/TabsFitModeDropdownWrapper.js
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import _toConsumableArray from"@babel/runtime/helpers/toConsumableArray";import"./TabsFitModeDropdownWrapper.css";import React from"react";import{cn}from"../../../utils/bem";import{getTabsWidth}from"../helpers";import{TabsMoreItems}from"../TabsMoreItems/TabsMoreItems";import{useFittingItems}from"./useFittingItems";var cnTabsFitModeDropdownWrapper=cn("TabsFitModeDropdownWrapper");export var TabsFitModeDropdownWrapper=function(a){var b=a.items,c=a.tabsDimensions,d=a.tabRefs,e=a.getItemLabel,f=a.getItemChecked,g=a.renderItem,h=a.onChange,i=a.renderItemsList,j=a.size,k=React.useRef(null),l=React.useRef(null),m=b.findIndex(f),n=useFittingItems({tabsDimensions:c,containerRef:k,moreItemsRef:l,activeIndex:m}),o=n.visibleIndexes,p=n.isItemHidden,q=b.filter(function(a,b){return p(b)}),r=React.useMemo(function(){return d.length?Math.max.apply(Math,_toConsumableArray(d.map(function(a){var b,c;return null!==(b=null===(c=a.current)||void 0===c?void 0:c.offsetHeight)&&void 0!==b?b:0}))):0},[c]),s=getTabsWidth(c.filter(function(a,b){return!p(b)}));return React.createElement("div",{ref:k,className:cnTabsFitModeDropdownWrapper(),style:{height:r}},React.createElement("div",{className:cnTabsFitModeDropdownWrapper("Tabs")},i({visibleIndexes:o,withRunningLine:!0,getTabClassName:function getTabClassName(a){return cnTabsFitModeDropdownWrapper("Tab",{hidden:p(a)})}})),React.createElement("div",{ref:l,className:cnTabsFitModeDropdownWrapper("MoreItems",{hidden:!q.length}),style:{left:q.length?s:void 0}},React.createElement(TabsMoreItems,{items:q,renderItem:g,onChange:h,getItemLabel:e,height:r,size:j})))};
|
|
2
|
+
//# sourceMappingURL=TabsFitModeDropdownWrapper.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TabsFitModeDropdownWrapper.js","names":["React","cn","getTabsWidth","TabsMoreItems","useFittingItems","cnTabsFitModeDropdownWrapper","TabsFitModeDropdownWrapper","items","tabsDimensions","tabRefs","getItemLabel","getItemChecked","renderItem","onChange","renderItemsList","size","ref","useRef","moreItemsRef","activeIndex","findIndex","containerRef","visibleIndexes","isItemHidden","hiddenItems","filter","_item","idx","maxTabHeight","useMemo","length","Math","max","map","tabRef","current","offsetHeight","visibleTabsWidth","_td","height","withRunningLine","getTabClassName","hidden","left"],"sources":["../../../../../../src/components/Tabs/TabsFitModeDropdownWrapper/TabsFitModeDropdownWrapper.tsx"],"sourcesContent":["import './TabsFitModeDropdownWrapper.css';\n\nimport React from 'react';\n\nimport { cn } from '../../../utils/bem';\nimport { getTabsWidth } from '../helpers';\nimport { TabsMoreItems } from '../TabsMoreItems/TabsMoreItems';\nimport { TabsFitModeWrapperProps } from '../types';\nimport { useFittingItems } from './useFittingItems';\n\nconst cnTabsFitModeDropdownWrapper = cn('TabsFitModeDropdownWrapper');\n\nexport const TabsFitModeDropdownWrapper = <ITEM,>({\n items,\n tabsDimensions,\n tabRefs,\n getItemLabel,\n getItemChecked,\n renderItem,\n onChange,\n renderItemsList,\n size,\n}: TabsFitModeWrapperProps<ITEM>): React.ReactElement | null => {\n const ref = React.useRef<HTMLDivElement>(null);\n const moreItemsRef = React.useRef<HTMLDivElement>(null);\n\n const activeIndex = items.findIndex(getItemChecked);\n\n const { visibleIndexes, isItemHidden } = useFittingItems({\n tabsDimensions,\n containerRef: ref,\n moreItemsRef,\n activeIndex,\n });\n\n const hiddenItems = items.filter((_item, idx) => isItemHidden(idx));\n const maxTabHeight: number = React.useMemo(() => {\n if (!tabRefs.length) {\n return 0;\n }\n return Math.max(\n ...tabRefs.map((tabRef) => tabRef.current?.offsetHeight ?? 0),\n );\n }, [tabsDimensions]);\n\n const visibleTabsWidth = getTabsWidth(\n tabsDimensions.filter((_td, idx) => !isItemHidden(idx)),\n );\n\n return (\n <div\n ref={ref}\n className={cnTabsFitModeDropdownWrapper()}\n style={{ height: maxTabHeight }}\n >\n <div className={cnTabsFitModeDropdownWrapper('Tabs')}>\n {renderItemsList({\n visibleIndexes,\n withRunningLine: true,\n getTabClassName: (idx) =>\n cnTabsFitModeDropdownWrapper('Tab', { hidden: isItemHidden(idx) }),\n })}\n </div>\n <div\n ref={moreItemsRef}\n className={cnTabsFitModeDropdownWrapper('MoreItems', {\n hidden: !hiddenItems.length,\n })}\n style={{\n /* В Safari скрытые табы с абсолютом продолжают растягивать контейнер,\n поэтому приходится позиционировать кнопку абсолютом */\n left: hiddenItems.length ? visibleTabsWidth : undefined,\n }}\n >\n <TabsMoreItems\n items={hiddenItems}\n renderItem={renderItem}\n onChange={onChange}\n getItemLabel={getItemLabel}\n height={maxTabHeight}\n size={size}\n />\n </div>\n </div>\n );\n};\n"],"mappings":"yEAAA,yCAEA,MAAOA,MAAP,KAAkB,OAAlB,CAEA,OAASC,EAAT,0BACA,OAASC,YAAT,kBACA,OAASC,aAAT,sCAEA,OAASC,eAAT,yBAEA,GAAMC,6BAA4B,CAAGJ,EAAE,CAAC,4BAAD,CAAvC,CAEA,MAAO,IAAMK,2BAA0B,CAAG,WAUsB,IAT9DC,EAS8D,GAT9DA,KAS8D,CAR9DC,CAQ8D,GAR9DA,cAQ8D,CAP9DC,CAO8D,GAP9DA,OAO8D,CAN9DC,CAM8D,GAN9DA,YAM8D,CAL9DC,CAK8D,GAL9DA,cAK8D,CAJ9DC,CAI8D,GAJ9DA,UAI8D,CAH9DC,CAG8D,GAH9DA,QAG8D,CAF9DC,CAE8D,GAF9DA,eAE8D,CAD9DC,CAC8D,GAD9DA,IAC8D,CACxDC,CAAG,CAAGhB,KAAK,CAACiB,MAAN,CAA6B,IAA7B,CADkD,CAExDC,CAAY,CAAGlB,KAAK,CAACiB,MAAN,CAA6B,IAA7B,CAFyC,CAIxDE,CAAW,CAAGZ,CAAK,CAACa,SAAN,CAAgBT,CAAhB,CAJ0C,GAMrBP,eAAe,CAAC,CACvDI,cAAc,CAAdA,CADuD,CAEvDa,YAAY,CAAEL,CAFyC,CAGvDE,YAAY,CAAZA,CAHuD,CAIvDC,WAAW,CAAXA,CAJuD,CAAD,CANM,CAMtDG,CANsD,GAMtDA,cANsD,CAMtCC,CANsC,GAMtCA,YANsC,CAaxDC,CAAW,CAAGjB,CAAK,CAACkB,MAAN,CAAa,SAACC,CAAD,CAAQC,CAAR,QAAgBJ,EAAY,CAACI,CAAD,CAA5B,CAAb,CAb0C,CAcxDC,CAAoB,CAAG5B,KAAK,CAAC6B,OAAN,CAAc,UAAM,OAC1CpB,EAAO,CAACqB,MADkC,CAIxCC,IAAI,CAACC,GAAL,OAAAD,IAAI,oBACNtB,CAAO,CAACwB,GAAR,CAAY,SAACC,CAAD,qCAAYA,CAAM,CAACC,OAAnB,qBAAY,EAAgBC,YAA5B,gBAA4C,CAA5C,CAAZ,CADM,EAJoC,CAEtC,CAKV,CAP4B,CAO1B,CAAC5B,CAAD,CAP0B,CAdiC,CAuBxD6B,CAAgB,CAAGnC,YAAY,CACnCM,CAAc,CAACiB,MAAf,CAAsB,SAACa,CAAD,CAAMX,CAAN,QAAc,CAACJ,CAAY,CAACI,CAAD,CAA3B,CAAtB,CADmC,CAvByB,CA2B9D,MACE,4BACE,GAAG,CAAEX,CADP,CAEE,SAAS,CAAEX,4BAA4B,EAFzC,CAGE,KAAK,CAAE,CAAEkC,MAAM,CAAEX,CAAV,CAHT,EAKE,2BAAK,SAAS,CAAEvB,4BAA4B,CAAC,MAAD,CAA5C,EACGS,CAAe,CAAC,CACfQ,cAAc,CAAdA,CADe,CAEfkB,eAAe,GAFA,CAGfC,eAAe,CAAE,yBAACd,CAAD,QACftB,6BAA4B,CAAC,KAAD,CAAQ,CAAEqC,MAAM,CAAEnB,CAAY,CAACI,CAAD,CAAtB,CAAR,CADb,CAHF,CAAD,CADlB,CALF,CAaE,2BACE,GAAG,CAAET,CADP,CAEE,SAAS,CAAEb,4BAA4B,CAAC,WAAD,CAAc,CACnDqC,MAAM,CAAE,CAAClB,CAAW,CAACM,MAD8B,CAAd,CAFzC,CAKE,KAAK,CAAE,CAGLa,IAAI,CAAEnB,CAAW,CAACM,MAAZ,CAAqBO,CAArB,OAHD,CALT,EAWE,oBAAC,aAAD,EACE,KAAK,CAAEb,CADT,CAEE,UAAU,CAAEZ,CAFd,CAGE,QAAQ,CAAEC,CAHZ,CAIE,YAAY,CAAEH,CAJhB,CAKE,MAAM,CAAEkB,CALV,CAME,IAAI,CAAEb,CANR,EAXF,CAbF,CAmCH,CAzEM"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useFittingItems.js","names":["React","useMemo","useComponentSize","useFittingItems","tabsDimensions","containerRef","moreItemsRef","activeIndex","containerWidth","width","moreItemsWidth","visibleIndexes","getFittingItems","isItemHidden","useCallback","idx","includes","totalWidth","Array","from","length","map","_el","index","size","gap","arr","entries","tabDimensions","isLastItem","push"],"sources":["../../../../../../src/components/Tabs/TabsFitModeDropdownWrapper/useFittingItems.ts"],"sourcesContent":["import React, { useMemo } from 'react';\n\nimport { useComponentSize } from '../../../hooks/useComponentSize/useComponentSize';\nimport { TabDimensions } from '../types';\n\nexport const useFittingItems = ({\n tabsDimensions,\n containerRef,\n moreItemsRef,\n activeIndex,\n}: {\n tabsDimensions: TabDimensions[];\n containerRef: React.RefObject<HTMLElement>;\n moreItemsRef: React.RefObject<HTMLElement>;\n activeIndex?: number;\n}): {\n visibleIndexes: number[];\n isItemHidden: (idx: number) => boolean;\n} => {\n const { width: containerWidth } = useComponentSize(containerRef);\n const { width: moreItemsWidth } = useComponentSize(moreItemsRef);\n\n const visibleIndexes = useMemo(\n () =>\n getFittingItems(\n tabsDimensions,\n containerWidth,\n moreItemsWidth,\n activeIndex,\n ),\n [tabsDimensions, containerWidth, moreItemsWidth, activeIndex],\n );\n\n return {\n visibleIndexes,\n isItemHidden: React.useCallback(\n (idx) => !visibleIndexes.includes(idx),\n [visibleIndexes],\n ),\n };\n};\n\nexport const getFittingItems = (\n tabsDimensions: TabDimensions[],\n totalWidth: number,\n moreItemsWidth: number,\n activeIndex?: number,\n): number[] => {\n if (!totalWidth) {\n return Array.from<number>({ length: tabsDimensions.length }).map(\n (_el, index) => index,\n );\n }\n let width =\n typeof activeIndex === 'number' && activeIndex > -1\n ? tabsDimensions[activeIndex].size + tabsDimensions[activeIndex].gap\n : 0;\n const arr: number[] = [];\n for (const [idx, tabDimensions] of tabsDimensions.entries()) {\n if (idx !== activeIndex) {\n const isLastItem = idx === tabsDimensions.length - 1;\n width += tabDimensions.size + (isLastItem ? 0 : tabDimensions.gap);\n if (width + moreItemsWidth > totalWidth) {\n if (activeIndex && !arr.includes(activeIndex)) {\n arr.push(activeIndex);\n }\n return arr;\n }\n arr.push(idx);\n } else {\n arr.push(activeIndex);\n }\n }\n\n return Array.from<number>({ length: tabsDimensions.length }).map(\n (_el, index) => index,\n );\n};\n"],"mappings":"stCAAA,MAAOA,MAAP,EAAgBC,OAAhB,KAA+B,OAA/B,CAEA,OAASC,gBAAT,wDAGA,MAAO,IAAMC,gBAAe,CAAG,WAa1B,IAZHC,EAYG,GAZHA,cAYG,CAXHC,CAWG,GAXHA,YAWG,CAVHC,CAUG,GAVHA,YAUG,CATHC,CASG,GATHA,WASG,GAC+BL,gBAAgB,CAACG,CAAD,CAD/C,CACYG,CADZ,GACKC,KADL,GAE+BP,gBAAgB,CAACI,CAAD,CAF/C,CAEYI,CAFZ,GAEKD,KAFL,CAIGE,CAAc,CAAGV,OAAO,CAC5B,iBACEW,gBAAe,CACbR,CADa,CAEbI,CAFa,CAGbE,CAHa,CAIbH,CAJa,CADjB,CAD4B,CAQ5B,CAACH,CAAD,CAAiBI,CAAjB,CAAiCE,CAAjC,CAAiDH,CAAjD,CAR4B,CAJ3B,CAeH,MAAO,CACLI,cAAc,CAAdA,CADK,CAELE,YAAY,CAAEb,KAAK,CAACc,WAAN,CACZ,SAACC,CAAD,QAAS,CAACJ,CAAc,CAACK,QAAf,CAAwBD,CAAxB,CAAV,CADY,CAEZ,CAACJ,CAAD,CAFY,CAFT,CAOR,CAnCM,CAqCP,MAAO,IAAMC,gBAAe,CAAG,SAC7BR,CAD6B,CAE7Ba,CAF6B,CAG7BP,CAH6B,CAI7BH,CAJ6B,CAKhB,CACb,GAAI,CAACU,CAAL,CACE,MAAOC,MAAK,CAACC,IAAN,CAAmB,CAAEC,MAAM,CAAEhB,CAAc,CAACgB,MAAzB,CAAnB,EAAsDC,GAAtD,CACL,SAACC,CAAD,CAAMC,CAAN,QAAgBA,EAAhB,CADK,CAAP,CAFW,MAMTd,CAAK,CACgB,QAAvB,QAAOF,EAAP,EAAiD,CAAC,CAAf,CAAAA,CAAnC,CACIH,CAAc,CAACG,CAAD,CAAd,CAA4BiB,IAA5B,CAAmCpB,CAAc,CAACG,CAAD,CAAd,CAA4BkB,GADnE,CAEI,CATO,CAUPC,CAAa,CAAG,EAVT,8BAWsBtB,CAAc,CAACuB,OAAf,EAXtB,MAWb,2BAA6D,iCAAjDZ,CAAiD,MAA5Ca,CAA4C,MAC3D,GAAIb,CAAG,GAAKR,CAAZ,CAAyB,CACvB,GAAMsB,EAAU,CAAGd,CAAG,GAAKX,CAAc,CAACgB,MAAf,CAAwB,CAAnD,CAEA,GADAX,CAAK,EAAImB,CAAa,CAACJ,IAAd,EAAsBK,CAAU,CAAG,CAAH,CAAOD,CAAa,CAACH,GAArD,CACT,CAAIhB,CAAK,CAAGC,CAAR,CAAyBO,CAA7B,CAIE,MAHIV,EAAW,EAAI,CAACmB,CAAG,CAACV,QAAJ,CAAaT,CAAb,CAGpB,EAFEmB,CAAG,CAACI,IAAJ,CAASvB,CAAT,CAEF,CAAOmB,CAAP,CAEFA,CAAG,CAACI,IAAJ,CAASf,CAAT,CACD,CAVD,IAWEW,EAAG,CAACI,IAAJ,CAASvB,CAAT,CAEH,CAzBY,+BA2Bb,MAAOW,MAAK,CAACC,IAAN,CAAmB,CAAEC,MAAM,CAAEhB,CAAc,CAACgB,MAAzB,CAAnB,EAAsDC,GAAtD,CACL,SAACC,CAAD,CAAMC,CAAN,QAAgBA,EAAhB,CADK,CAGR,CAnCM"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import _slicedToArray from"@babel/runtime/helpers/slicedToArray";import"./TabsFitModeScrollWrapper.css";import{IconArrowLeft}from"@consta/icons/IconArrowLeft";import{IconArrowRight}from"@consta/icons/IconArrowRight";import React from"react";import{useResizeObserved}from"../../../hooks/useResizeObserved/useResizeObserved";import{useScrollPosition}from"../../../hooks/useScrollPosition/useScrollPosition";import{cn}from"../../../utils/bem";import{Button}from"../../Button/Button";import{getTabsWidth,getVisibleTabsRange}from"../helpers";var cnTabsFitModeScrollWrapper=cn("TabsFitModeScrollWrapper");export var TabsFitModeScrollWrapper=function(a){var b=a.tabsDimensions,c=a.items,d=a.renderItemsList,e=a.getItemChecked,f=React.useRef(null),g=useResizeObserved(React.useMemo(function(){return[f]},[f,c]),function(a){var b;return{isScrollable:a&&a.scrollWidth>a.offsetWidth,width:null!==(b=null===a||void 0===a?void 0:a.offsetWidth)&&void 0!==b?b:0,paddingLeft:a?parseInt(getComputedStyle(a).paddingLeft,10):0}}),h=_slicedToArray(g,1),i=h[0],j=i.isScrollable,k=i.width,l=i.paddingLeft,m=useScrollPosition(f.current),n=m.scrollLeft,o=getVisibleTabsRange({tabsDimensions:b,containerWidth:k,containerPaddingLeft:l,scrollLeft:n}),p=_slicedToArray(o,2),q=p[0],r=p[1],s=function(a){if(!(a>=q&&a<=r)){var c,d=getTabsWidth(b.slice(0,a));null===(c=f.current)||void 0===c?void 0:c.scrollTo({left:d,behavior:"smooth"})}},t=function(){s(q-1)},u=function(){s(r+1)},v=c.findIndex(e);return React.useEffect(function(){j&&s(v)},[v,j]),React.createElement("div",{className:cnTabsFitModeScrollWrapper()},j&&React.createElement(React.Fragment,null,["prev","next"].map(function(a){return React.createElement(Button,{key:a,view:"clear",type:"button",size:"xs",onlyIcon:!0,disabled:"prev"===a?0===q:r===c.length-1,iconLeft:"prev"===a?IconArrowLeft:IconArrowRight,className:cnTabsFitModeScrollWrapper("Button",{to:a}),onClick:"prev"===a?t:u})})),React.createElement("div",{className:cnTabsFitModeScrollWrapper("Content"),ref:f},d({visibleIndexes:Array.from(Array(c.length).keys()),getTabClassName:function getTabClassName(a){return cnTabsFitModeScrollWrapper("Tab",{noMargin:a===c.length-1})}})))};
|
|
2
|
+
//# sourceMappingURL=TabsFitModeScrollWrapper.js.map
|
package/__internal__/src/components/Tabs/TabsFitModeScrollWrapper/TabsFitModeScrollWrapper.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TabsFitModeScrollWrapper.js","names":["IconArrowLeft","IconArrowRight","React","useResizeObserved","useScrollPosition","cn","Button","getTabsWidth","getVisibleTabsRange","cnTabsFitModeScrollWrapper","TabsFitModeScrollWrapper","tabsDimensions","items","renderItemsList","getItemChecked","scrollContainerRef","useRef","useMemo","el","isScrollable","scrollWidth","offsetWidth","width","paddingLeft","parseInt","getComputedStyle","containerWidth","containerPaddingLeft","current","scrollLeft","firstVisibleTabIdx","lastVisibleTabIdx","scrollTabIntoView","idx","previousTabsWidth","slice","scrollTo","left","behavior","scrollPrev","scrollNext","checkedTabIdx","findIndex","useEffect","map","buttonTo","length","to","visibleIndexes","Array","from","keys","getTabClassName","noMargin"],"sources":["../../../../../../src/components/Tabs/TabsFitModeScrollWrapper/TabsFitModeScrollWrapper.tsx"],"sourcesContent":["import './TabsFitModeScrollWrapper.css';\n\nimport { IconArrowLeft } from '@consta/icons/IconArrowLeft';\nimport { IconArrowRight } from '@consta/icons/IconArrowRight';\nimport React from 'react';\n\nimport { useResizeObserved } from '../../../hooks/useResizeObserved/useResizeObserved';\nimport { useScrollPosition } from '../../../hooks/useScrollPosition/useScrollPosition';\nimport { cn } from '../../../utils/bem';\nimport { Button } from '../../Button/Button';\nimport { getTabsWidth, getVisibleTabsRange } from '../helpers';\nimport { TabsFitModeWrapperProps } from '../types';\n\nconst cnTabsFitModeScrollWrapper = cn('TabsFitModeScrollWrapper');\n\nexport const TabsFitModeScrollWrapper = <ITEM,>({\n tabsDimensions,\n items,\n renderItemsList,\n getItemChecked,\n}: TabsFitModeWrapperProps<ITEM>): React.ReactElement | null => {\n const scrollContainerRef = React.useRef<HTMLDivElement>(null);\n const [\n { isScrollable, width: containerWidth, paddingLeft: containerPaddingLeft },\n ] = useResizeObserved(\n React.useMemo(() => [scrollContainerRef], [scrollContainerRef, items]),\n (el) => ({\n isScrollable: el && el.scrollWidth > el.offsetWidth,\n width: el?.offsetWidth ?? 0,\n paddingLeft: el ? parseInt(getComputedStyle(el).paddingLeft, 10) : 0,\n }),\n );\n const { scrollLeft } = useScrollPosition(scrollContainerRef.current);\n\n const [firstVisibleTabIdx, lastVisibleTabIdx] = getVisibleTabsRange({\n tabsDimensions,\n containerWidth,\n containerPaddingLeft,\n scrollLeft,\n });\n\n const scrollTabIntoView = (idx: number) => {\n const tabIsVisible = idx >= firstVisibleTabIdx && idx <= lastVisibleTabIdx;\n\n if (!tabIsVisible) {\n const previousTabsWidth = getTabsWidth(tabsDimensions.slice(0, idx));\n scrollContainerRef.current?.scrollTo({\n left: previousTabsWidth,\n behavior: 'smooth',\n });\n }\n };\n\n const scrollPrev = () => {\n scrollTabIntoView(firstVisibleTabIdx - 1);\n };\n\n const scrollNext = () => {\n scrollTabIntoView(lastVisibleTabIdx + 1);\n };\n\n // Подскролливаем к выбранному табу\n const checkedTabIdx = items.findIndex(getItemChecked);\n React.useEffect(() => {\n if (isScrollable) {\n scrollTabIntoView(checkedTabIdx);\n }\n }, [checkedTabIdx, isScrollable]);\n\n return (\n <div className={cnTabsFitModeScrollWrapper()}>\n {isScrollable && (\n <>\n {(['prev', 'next'] as const).map((buttonTo) => (\n <Button\n key={buttonTo}\n view=\"clear\"\n type=\"button\"\n size=\"xs\"\n onlyIcon\n disabled={\n buttonTo === 'prev'\n ? firstVisibleTabIdx === 0\n : lastVisibleTabIdx === items.length - 1\n }\n iconLeft={buttonTo === 'prev' ? IconArrowLeft : IconArrowRight}\n className={cnTabsFitModeScrollWrapper('Button', { to: buttonTo })}\n onClick={buttonTo === 'prev' ? scrollPrev : scrollNext}\n />\n ))}\n </>\n )}\n <div\n className={cnTabsFitModeScrollWrapper('Content')}\n ref={scrollContainerRef}\n >\n {renderItemsList({\n visibleIndexes: Array.from(Array(items.length).keys()),\n getTabClassName: (idx) =>\n cnTabsFitModeScrollWrapper('Tab', {\n noMargin: idx === items.length - 1,\n }),\n })}\n </div>\n </div>\n );\n};\n"],"mappings":"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"}
|
package/__internal__/src/components/Tabs/TabsFitModeScrollWrapper/__test__/helpers.test.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"helpers.test.js","names":["getVisibleTabsRange","describe","tabsDimensions","size","gap","it","expect","containerWidth","scrollLeft","containerPaddingLeft","toEqual"],"sources":["../../../../../../../src/components/Tabs/TabsFitModeScrollWrapper/__test__/helpers.test.ts"],"sourcesContent":["import { getVisibleTabsRange } from '../../helpers';\nimport { TabDimensions } from '../../types';\n\ndescribe('getVisibleTabsRange', () => {\n const tabsDimensions: TabDimensions[] = [\n {\n size: 100,\n gap: 10,\n },\n {\n size: 100,\n gap: 10,\n },\n {\n size: 100,\n gap: 0,\n },\n ];\n\n it('возвращает все табы, если все вмещаются', () => {\n expect(\n getVisibleTabsRange({\n tabsDimensions,\n containerWidth: 330,\n scrollLeft: 0,\n containerPaddingLeft: 10,\n }),\n ).toEqual([0, 2]);\n });\n\n it('возвращает все табы, если проскроллили только паддинг', () => {\n expect(\n getVisibleTabsRange({\n tabsDimensions,\n containerWidth: 320,\n scrollLeft: 10,\n containerPaddingLeft: 10,\n }),\n ).toEqual([0, 2]);\n });\n\n it('возвращает все табы, кроме последнего, если последний не вместился полностью', () => {\n expect(\n getVisibleTabsRange({\n tabsDimensions,\n containerWidth: 329,\n scrollLeft: 0,\n containerPaddingLeft: 10,\n }),\n ).toEqual([0, 1]);\n });\n\n it('возвращает все табы, кроме первого, если первый не виден полностью из-за скролла', () => {\n expect(\n getVisibleTabsRange({\n tabsDimensions,\n containerWidth: 319,\n scrollLeft: 11,\n containerPaddingLeft: 10,\n }),\n ).toEqual([1, 2]);\n });\n\n it('возвращает только средний таб, если первый и последний не видны полностью', () => {\n expect(\n getVisibleTabsRange({\n tabsDimensions,\n containerWidth: 318,\n scrollLeft: 11,\n containerPaddingLeft: 10,\n }),\n ).toEqual([1, 1]);\n });\n\n it('возвращает только средний таб, даже если он не влез полностью, но виден его левый край', () => {\n expect(\n getVisibleTabsRange({\n tabsDimensions,\n containerWidth: 50,\n scrollLeft: 110,\n containerPaddingLeft: 10,\n }),\n ).toEqual([1, 1]);\n });\n\n it('возвращает только первый таб, если ничего не влезает', () => {\n expect(\n getVisibleTabsRange({\n tabsDimensions,\n containerWidth: 10,\n scrollLeft: 0,\n containerPaddingLeft: 10,\n }),\n ).toEqual([0, 0]);\n });\n});\n"],"mappings":"AAAA,OAASA,mBAAT,qBAGAC,QAAQ,CAAC,qBAAD,CAAwB,UAAM,CACpC,GAAMC,EAA+B,CAAG,CACtC,CACEC,IAAI,CAAE,GADR,CAEEC,GAAG,CAAE,EAFP,CADsC,CAKtC,CACED,IAAI,CAAE,GADR,CAEEC,GAAG,CAAE,EAFP,CALsC,CAStC,CACED,IAAI,CAAE,GADR,CAEEC,GAAG,CAAE,CAFP,CATsC,CAAxC,CAeAC,EAAE,CAAC,8MAAD,CAA4C,UAAM,CAClDC,MAAM,CACJN,mBAAmB,CAAC,CAClBE,cAAc,CAAdA,CADkB,CAElBK,cAAc,CAAE,GAFE,CAGlBC,UAAU,CAAE,CAHM,CAIlBC,oBAAoB,CAAE,EAJJ,CAAD,CADf,CAAN,CAOEC,OAPF,CAOU,CAAC,CAAD,CAAI,CAAJ,CAPV,CAQD,CATC,CAhBkC,CA2BpCL,EAAE,CAAC,6RAAD,CAA0D,UAAM,CAChEC,MAAM,CACJN,mBAAmB,CAAC,CAClBE,cAAc,CAAdA,CADkB,CAElBK,cAAc,CAAE,GAFE,CAGlBC,UAAU,CAAE,EAHM,CAIlBC,oBAAoB,CAAE,EAJJ,CAAD,CADf,CAAN,CAOEC,OAPF,CAOU,CAAC,CAAD,CAAI,CAAJ,CAPV,CAQD,CATC,CA3BkC,CAsCpCL,EAAE,CAAC,mZAAD,CAAiF,UAAM,CACvFC,MAAM,CACJN,mBAAmB,CAAC,CAClBE,cAAc,CAAdA,CADkB,CAElBK,cAAc,CAAE,GAFE,CAGlBC,UAAU,CAAE,CAHM,CAIlBC,oBAAoB,CAAE,EAJJ,CAAD,CADf,CAAN,CAOEC,OAPF,CAOU,CAAC,CAAD,CAAI,CAAJ,CAPV,CAQD,CATC,CAtCkC,CAiDpCL,EAAE,CAAC,4ZAAD,CAAqF,UAAM,CAC3FC,MAAM,CACJN,mBAAmB,CAAC,CAClBE,cAAc,CAAdA,CADkB,CAElBK,cAAc,CAAE,GAFE,CAGlBC,UAAU,CAAE,EAHM,CAIlBC,oBAAoB,CAAE,EAJJ,CAAD,CADf,CAAN,CAOEC,OAPF,CAOU,CAAC,CAAD,CAAI,CAAJ,CAPV,CAQD,CATC,CAjDkC,CA4DpCL,EAAE,CAAC,iYAAD,CAA8E,UAAM,CACpFC,MAAM,CACJN,mBAAmB,CAAC,CAClBE,cAAc,CAAdA,CADkB,CAElBK,cAAc,CAAE,GAFE,CAGlBC,UAAU,CAAE,EAHM,CAIlBC,oBAAoB,CAAE,EAJJ,CAAD,CADf,CAAN,CAOEC,OAPF,CAOU,CAAC,CAAD,CAAI,CAAJ,CAPV,CAQD,CATC,CA5DkC,CAuEpCL,EAAE,CAAC,sbAAD,CAA2F,UAAM,CACjGC,MAAM,CACJN,mBAAmB,CAAC,CAClBE,cAAc,CAAdA,CADkB,CAElBK,cAAc,CAAE,EAFE,CAGlBC,UAAU,CAAE,GAHM,CAIlBC,oBAAoB,CAAE,EAJJ,CAAD,CADf,CAAN,CAOEC,OAPF,CAOU,CAAC,CAAD,CAAI,CAAJ,CAPV,CAQD,CATC,CAvEkC,CAkFpCL,EAAE,CAAC,kRAAD,CAAyD,UAAM,CAC/DC,MAAM,CACJN,mBAAmB,CAAC,CAClBE,cAAc,CAAdA,CADkB,CAElBK,cAAc,CAAE,EAFE,CAGlBC,UAAU,CAAE,CAHM,CAIlBC,oBAAoB,CAAE,EAJJ,CAAD,CADf,CAAN,CAOEC,OAPF,CAOU,CAAC,CAAD,CAAI,CAAJ,CAPV,CAQD,CATC,CAUH,CA5FO,C"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TabsLine.js","names":["React","useMemo","cn","cnTabsLine","TabsBorderLine","linePosition","TabsRunningLine","activeTabIdx","tabsDimensions","visibleIndexes","size","offset","reduce","a","v","index","includes","gap","TabsLine","type","position","formatCSSValue","n"],"sources":["../../../../../../src/components/Tabs/TabsLine/TabsLine.tsx"],"sourcesContent":["import './TabsLine.css';\n\nimport React, { useMemo } from 'react';\n\nimport { cn } from '../../../utils/bem';\nimport { TabDimensions, TabsPropLinePosition } from '../types';\n\nconst cnTabsLine = cn('TabsLine');\n\nexport const TabsBorderLine: React.FC<{\n linePosition: TabsPropLinePosition;\n}> = ({ linePosition }) => {\n return <TabsLine type=\"border\" linePosition={linePosition} size=\"100%\" />;\n};\n\nexport const TabsRunningLine: React.FC<{\n linePosition: TabsPropLinePosition;\n activeTabIdx: number;\n visibleIndexes?: number[];\n tabsDimensions: TabDimensions[];\n}> = ({ linePosition, activeTabIdx, tabsDimensions, visibleIndexes }) => {\n const size = tabsDimensions[activeTabIdx]?.size ?? 0;\n\n const offset = useMemo(\n () =>\n tabsDimensions.reduce(\n (a, v, index) =>\n a +\n (visibleIndexes?.includes(index) && index < activeTabIdx\n ? v.size + v.gap\n : 0),\n 0,\n ),\n [tabsDimensions, visibleIndexes, activeTabIdx],\n );\n\n return (\n <TabsLine\n type=\"running\"\n linePosition={linePosition}\n size={size}\n offset={offset}\n />\n );\n};\n\nconst TabsLine: React.FC<{\n type: 'border' | 'running';\n linePosition: TabsPropLinePosition;\n size: number | string;\n offset?: number | string;\n}> = ({ type, linePosition, size, offset = '0px' }) => (\n <div\n className={cnTabsLine({ type, position: linePosition })}\n style={{\n ['--line-length' as string]: formatCSSValue(size),\n ['--line-offset' as string]: formatCSSValue(offset),\n }}\n />\n);\n\nconst formatCSSValue = (n: number | string) =>\n typeof n === 'number' ? `${n}px` : n;\n"],"mappings":"mEAAA,uBAEA,MAAOA,MAAP,EAAgBC,OAAhB,KAA+B,OAA/B,CAEA,OAASC,EAAT,0BAGA,GAAMC,WAAU,CAAGD,EAAE,CAAC,UAAD,CAArB,CAEA,MAAO,IAAME,eAEX,CAAG,WAAsB,IAAnBC,EAAmB,GAAnBA,YAAmB,CACzB,MAAO,qBAAC,QAAD,EAAU,IAAI,CAAC,QAAf,CAAwB,YAAY,CAAEA,CAAtC,CAAoD,IAAI,CAAC,MAAzD,EACR,CAJM,CAMP,MAAO,IAAMC,gBAKX,CAAG,WAAoE,SAAjED,CAAiE,GAAjEA,YAAiE,CAAnDE,CAAmD,GAAnDA,YAAmD,CAArCC,CAAqC,GAArCA,cAAqC,CAArBC,CAAqB,GAArBA,cAAqB,CACjEC,CAAI,qBAAGF,CAAc,CAACD,CAAD,CAAjB,qBAAG,EAA8BG,IAAjC,gBAAyC,CADoB,CAGjEC,CAAM,CAAGV,OAAO,CACpB,iBACEO,EAAc,CAACI,MAAf,CACE,SAACC,CAAD,CAAIC,CAAJ,CAAOC,CAAP,QACEF,EAAC,EACA,OAAAJ,CAAc,WAAdA,CAAA,EAAAA,CAAc,CAAEO,QAAhB,CAAyBD,CAAzB,GAAmCA,CAAK,CAAGR,CAA3C,CACGO,CAAC,CAACJ,IAAF,CAASI,CAAC,CAACG,GADd,CAEG,CAHH,CADH,CADF,CAME,CANF,CADF,CADoB,CAUpB,CAACT,CAAD,CAAiBC,CAAjB,CAAiCF,CAAjC,CAVoB,CAHiD,CAgBvE,MACE,qBAAC,QAAD,EACE,IAAI,CAAC,SADP,CAEE,YAAY,CAAEF,CAFhB,CAGE,IAAI,CAAEK,CAHR,CAIE,MAAM,CAAEC,CAJV,EAOH,CA7BM,C,GA+BDO,SAKJ,CAAG,kBAAGC,CAAH,GAAGA,IAAH,CAASd,CAAT,GAASA,YAAT,CAAuBK,CAAvB,GAAuBA,IAAvB,KAA6BC,MAA7B,CAA6BA,CAA7B,YAAsC,KAAtC,SACH,4BACE,SAAS,CAAER,UAAU,CAAC,CAAEgB,IAAI,CAAJA,CAAF,CAAQC,QAAQ,CAAEf,CAAlB,CAAD,CADvB,CAEE,KAAK,yBACF,eADE,CAC0BgB,cAAc,CAACX,CAAD,CADxC,oBAEF,eAFE,CAE0BW,cAAc,CAACV,CAAD,CAFxC,IAFP,EADG,C,CAUCU,cAAc,CAAG,SAACC,CAAD,QACR,QAAb,QAAOA,EAAP,WAA2BA,CAA3B,OAAmCA,CADd,C"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TabsListWrapper.js","names":["React","range","TabsListWrapper","renderItemsList","items","visibleIndexes","length"],"sources":["../../../../../../src/components/Tabs/TabsListWrapper/TabsListWrapper.tsx"],"sourcesContent":["import React from 'react';\n\nimport { range } from '##/utils/array';\n\nimport { TabsFitModeWrapperProps } from '../types';\n\nexport const TabsListWrapper = <ITEM,>({\n renderItemsList,\n items,\n}: TabsFitModeWrapperProps<ITEM>) => {\n return <>{renderItemsList({ visibleIndexes: range(items.length) })}</>;\n};\n"],"mappings":"AAAA,MAAOA,MAAP,KAAkB,OAAlB,CAEA,OAASC,KAAT,4BAIA,MAAO,IAAMC,gBAAe,CAAG,WAGM,IAFnCC,EAEmC,GAFnCA,eAEmC,CADnCC,CACmC,GADnCA,KACmC,CACnC,MAAO,yCAAGD,CAAe,CAAC,CAAEE,cAAc,CAAEJ,KAAK,CAACG,CAAK,CAACE,MAAP,CAAvB,CAAD,CAAlB,CACR,CALM"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './TabsListWrapper';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../../../../../../src/components/Tabs/TabsListWrapper/index.ts"],"sourcesContent":["export * from './TabsListWrapper';\n"],"mappings":"AAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.TabsMoreItems-Button{align-items:center;display:flex}.TabsMoreItems-Content{white-space:nowrap}.TabsMoreItems-Item{padding:0 var(--space-s)}.TabsMoreItems-Item_active{background:var(--color-bg-stripe)}.TabsMoreItems-Item>*{width:100%}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import _slicedToArray from"@babel/runtime/helpers/slicedToArray";import"./TabsMoreItems.css";import{IconMeatball}from"@consta/icons/IconMeatball";import React,{forwardRef,useCallback,useEffect,useRef,useState}from"react";import{Transition}from"react-transition-group";import{Button}from"../../Button";import{ListBox}from"../../ListCanary";import{Popover}from"../../Popover/Popover";import{useFlag}from"../../../hooks/useFlag";import{useForkRef}from"../../../hooks/useForkRef";import{animateTimeout,cnMixPopoverAnimate}from"../../../mixs/MixPopoverAnimate";import{cn}from"../../../utils/bem";var cnTabsMoreItems=cn("TabsMoreItems"),TabsMoreItemsRender=function(a,b){var c=a.items,d=a.renderItem,e=a.getItemLabel,f=a.height,g=a.size,h=a.onChange,i=useFlag(!1),j=_slicedToArray(i,2),k=j[0],l=j[1],m=useRef(null),n=useRef(null),o=useState("downStartLeft"),p=_slicedToArray(o,2),q=p[0],r=p[1],s=useState(-1),t=_slicedToArray(s,2),u=t[0],v=t[1],w=useRef(-1),x=useRef(!1),y=useCallback(function(a){var b=function(){a.stopPropagation(),a.preventDefault()};if("ArrowDown"===a.key||"ArrowUp"===a.key){b();var d=w.current+("ArrowDown"===a.key?1:-1);return void v(Math.min(Math.max(d,0),c.length))}if("Enter"===a.key){if(b(),!x.current)return void l.on();var e=c[w.current];return e&&(null===h||void 0===h?void 0:h({e:a,value:e})),void l.off()}"Escape"===a.key&&(b(),l.off())},[c]);return useEffect(function(){0===c.length&&l.off()},[c]),useEffect(function(){w.current=u},[u]),useEffect(function(){x.current=k,k||v(-1)},[k]),React.createElement(React.Fragment,null,React.createElement("div",{ref:useForkRef([b,m]),className:cnTabsMoreItems("Button"),style:{height:f}},React.createElement(Button,{size:"xs",type:"button",view:"ghost",onlyIcon:!0,iconLeft:IconMeatball,onClick:l.toggle,onKeyDown:y})),React.createElement(Transition,{in:k,unmountOnExit:!0,nodeRef:n,timeout:animateTimeout},function(a){return React.createElement(Popover,{anchorRef:m,offset:-1,ref:n,direction:"downStartRight",onClickOutside:l.off,spareDirection:"downStartLeft",className:cnTabsMoreItems("Popover",[cnMixPopoverAnimate({animate:a,direction:q})]),onSetDirection:r,possibleDirections:["downStartRight","downStartLeft","upStartRight","upStartLeft","downCenter","upCenter"]},React.createElement(ListBox,{shadow:!0,border:!0,size:g,form:"default",className:cnTabsMoreItems("Content")},c.map(function(a,b){return React.createElement("div",{key:e(a),className:cnTabsMoreItems("Item",{active:u===b})},d(a,l.off,!0))})))}))};export var TabsMoreItems=forwardRef(TabsMoreItemsRender);
|
|
2
|
+
//# sourceMappingURL=TabsMoreItems.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TabsMoreItems.js","names":["IconMeatball","React","forwardRef","useCallback","useEffect","useRef","useState","Transition","Button","ListBox","Popover","useFlag","useForkRef","animateTimeout","cnMixPopoverAnimate","cn","cnTabsMoreItems","TabsMoreItemsRender","props","ref","items","renderItem","getItemLabel","height","size","onChange","isOpen","setIsOpen","buttonRef","popoverRef","direction","setDirection","highlightIndex","setHighlightIndex","highlightRef","openRef","handleKeyDown","e","preventDefault","stopPropagation","key","value","current","Math","min","max","length","on","off","toggle","animate","map","item","i","active","TabsMoreItems"],"sources":["../../../../../../src/components/Tabs/TabsMoreItems/TabsMoreItems.tsx"],"sourcesContent":["import './TabsMoreItems.css';\n\nimport { IconMeatball } from '@consta/icons/IconMeatball';\nimport React, {\n forwardRef,\n useCallback,\n useEffect,\n useRef,\n useState,\n} from 'react';\nimport { Transition } from 'react-transition-group';\n\nimport { Button } from '##/components/Button';\nimport { ListBox } from '##/components/ListCanary';\nimport { Direction, Popover } from '##/components/Popover/Popover';\nimport { useFlag } from '##/hooks/useFlag';\nimport { useForkRef } from '##/hooks/useForkRef';\nimport { animateTimeout, cnMixPopoverAnimate } from '##/mixs/MixPopoverAnimate';\nimport { cn } from '##/utils/bem';\n\nimport { TabsMoreItemsComponent, TabsMoreItemsProps } from '../types';\n\nconst cnTabsMoreItems = cn('TabsMoreItems');\n\nconst TabsMoreItemsRender = (\n props: TabsMoreItemsProps,\n ref: React.Ref<HTMLDivElement>,\n) => {\n const { items, renderItem, getItemLabel, height, size, onChange } = props;\n const [isOpen, setIsOpen] = useFlag(false);\n const buttonRef = useRef<HTMLDivElement>(null);\n const popoverRef = useRef<HTMLDivElement>(null);\n const [direction, setDirection] = useState<Direction>('downStartLeft');\n const [highlightIndex, setHighlightIndex] = useState(-1);\n\n const highlightRef: React.MutableRefObject<number> = useRef(-1);\n const openRef: React.MutableRefObject<boolean> = useRef(false);\n\n const handleKeyDown: React.KeyboardEventHandler = useCallback(\n (e) => {\n const preventDefault = () => {\n e.stopPropagation();\n e.preventDefault();\n };\n\n if (e.key === 'ArrowDown' || e.key === 'ArrowUp') {\n preventDefault();\n const value = highlightRef.current + (e.key === 'ArrowDown' ? 1 : -1);\n setHighlightIndex(Math.min(Math.max(value, 0), items.length));\n return;\n }\n if (e.key === 'Enter') {\n preventDefault();\n if (!openRef.current) {\n setIsOpen.on();\n return;\n }\n const value = items[highlightRef.current];\n value && onChange?.({ e, value });\n setIsOpen.off();\n return;\n }\n if (e.key === 'Escape') {\n preventDefault();\n setIsOpen.off();\n }\n },\n [items],\n );\n\n useEffect(() => {\n items.length === 0 && setIsOpen.off();\n }, [items]);\n\n useEffect(() => {\n highlightRef.current = highlightIndex;\n }, [highlightIndex]);\n\n useEffect(() => {\n openRef.current = isOpen;\n if (!isOpen) {\n setHighlightIndex(-1);\n }\n }, [isOpen]);\n\n return (\n <>\n <div\n ref={useForkRef([ref, buttonRef])}\n className={cnTabsMoreItems('Button')}\n style={{ height }}\n >\n <Button\n size=\"xs\"\n type=\"button\"\n view=\"ghost\"\n onlyIcon\n iconLeft={IconMeatball}\n onClick={setIsOpen.toggle}\n onKeyDown={handleKeyDown}\n />\n </div>\n <Transition\n in={isOpen}\n unmountOnExit\n nodeRef={popoverRef}\n timeout={animateTimeout}\n >\n {(animate) => (\n <Popover\n anchorRef={buttonRef}\n offset={-1}\n ref={popoverRef}\n direction=\"downStartRight\"\n onClickOutside={setIsOpen.off}\n spareDirection=\"downStartLeft\"\n className={cnTabsMoreItems('Popover', [\n cnMixPopoverAnimate({ animate, direction }),\n ])}\n onSetDirection={setDirection}\n possibleDirections={[\n 'downStartRight',\n 'downStartLeft',\n 'upStartRight',\n 'upStartLeft',\n 'downCenter',\n 'upCenter',\n ]}\n >\n <ListBox\n shadow\n border\n size={size}\n form=\"default\"\n className={cnTabsMoreItems('Content')}\n >\n {items.map((item, i) => (\n <div\n key={getItemLabel(item)}\n className={cnTabsMoreItems('Item', {\n active: highlightIndex === i,\n })}\n >\n {renderItem(item, setIsOpen.off, true)}\n </div>\n ))}\n </ListBox>\n </Popover>\n )}\n </Transition>\n </>\n );\n};\n\nexport const TabsMoreItems = forwardRef(\n TabsMoreItemsRender,\n) as TabsMoreItemsComponent;\n"],"mappings":"iEAAA,4BAEA,OAASA,YAAT,KAA6B,4BAA7B,CACA,MAAOC,MAAP,EACEC,UADF,CAEEC,WAFF,CAGEC,SAHF,CAIEC,MAJF,CAKEC,QALF,KAMO,OANP,CAOA,OAASC,UAAT,KAA2B,wBAA3B,CAEA,OAASC,MAAT,oBACA,OAASC,OAAT,wBACA,OAAoBC,OAApB,6BACA,OAASC,OAAT,8BACA,OAASC,UAAT,iCACA,OAASC,cAAT,CAAyBC,mBAAzB,uCACA,OAASC,EAAT,0B,GAIMC,gBAAe,CAAGD,EAAE,CAAC,eAAD,C,CAEpBE,mBAAmB,CAAG,SAC1BC,CAD0B,CAE1BC,CAF0B,CAGvB,IACKC,EADL,CACiEF,CADjE,CACKE,KADL,CACYC,CADZ,CACiEH,CADjE,CACYG,UADZ,CACwBC,CADxB,CACiEJ,CADjE,CACwBI,YADxB,CACsCC,CADtC,CACiEL,CADjE,CACsCK,MADtC,CAC8CC,CAD9C,CACiEN,CADjE,CAC8CM,IAD9C,CACoDC,CADpD,CACiEP,CADjE,CACoDO,QADpD,GAEyBd,OAAO,IAFhC,uBAEIe,CAFJ,MAEYC,CAFZ,MAGGC,CAAS,CAAGvB,MAAM,CAAiB,IAAjB,CAHrB,CAIGwB,CAAU,CAAGxB,MAAM,CAAiB,IAAjB,CAJtB,GAK+BC,QAAQ,CAAY,eAAZ,CALvC,uBAKIwB,CALJ,MAKeC,CALf,QAMyCzB,QAAQ,CAAC,CAAC,CAAF,CANjD,uBAMI0B,CANJ,MAMoBC,CANpB,MAQGC,CAA4C,CAAG7B,MAAM,CAAC,CAAC,CAAF,CARxD,CASG8B,CAAwC,CAAG9B,MAAM,IATpD,CAWG+B,CAAyC,CAAGjC,WAAW,CAC3D,SAACkC,CAAD,CAAO,CACL,GAAMC,EAAc,CAAG,UAAM,CAC3BD,CAAC,CAACE,eAAF,EAD2B,CAE3BF,CAAC,CAACC,cAAF,EACD,CAHD,CAKA,GAAc,WAAV,GAAAD,CAAC,CAACG,GAAF,EAAmC,SAAV,GAAAH,CAAC,CAACG,GAA/B,CAAkD,CAChDF,CAAc,EADkC,CAEhD,GAAMG,EAAK,CAAGP,CAAY,CAACQ,OAAb,EAAkC,WAAV,GAAAL,CAAC,CAACG,GAAF,CAAwB,CAAxB,CAA4B,CAAC,CAArD,CAAd,CAEA,WADAP,EAAiB,CAACU,IAAI,CAACC,GAAL,CAASD,IAAI,CAACE,GAAL,CAASJ,CAAT,CAAgB,CAAhB,CAAT,CAA6BrB,CAAK,CAAC0B,MAAnC,CAAD,CAElB,CACD,GAAc,OAAV,GAAAT,CAAC,CAACG,GAAN,CAAuB,CAErB,GADAF,CAAc,EACd,CAAI,CAACH,CAAO,CAACO,OAAb,CAEE,WADAf,EAAS,CAACoB,EAAV,EACA,CAEF,GAAMN,EAAK,CAAGrB,CAAK,CAACc,CAAY,CAACQ,OAAd,CAAnB,CAGA,MAFAD,EAAK,UAAIhB,CAAJ,WAAIA,CAAJ,QAAIA,CAAQ,CAAG,CAAEY,CAAC,CAADA,CAAF,CAAKI,KAAK,CAALA,CAAL,CAAH,CAAZ,CAEL,KADAd,EAAS,CAACqB,GAAV,EAED,CACa,QAAV,GAAAX,CAAC,CAACG,GAvBD,GAwBHF,CAAc,EAxBX,CAyBHX,CAAS,CAACqB,GAAV,EAzBG,CA2BN,CA5B0D,CA6B3D,CAAC5B,CAAD,CA7B2D,CAX1D,CA0DH,MAfAhB,UAAS,CAAC,UAAM,CACG,CAAjB,GAAAgB,CAAK,CAAC0B,MAAN,EAAsBnB,CAAS,CAACqB,GAAV,EACvB,CAFQ,CAEN,CAAC5B,CAAD,CAFM,CAeT,CAXAhB,SAAS,CAAC,UAAM,CACd8B,CAAY,CAACQ,OAAb,CAAuBV,CACxB,CAFQ,CAEN,CAACA,CAAD,CAFM,CAWT,CAPA5B,SAAS,CAAC,UAAM,CACd+B,CAAO,CAACO,OAAR,CAAkBhB,CADJ,CAETA,CAFS,EAGZO,CAAiB,CAAC,CAAC,CAAF,CAEpB,CALQ,CAKN,CAACP,CAAD,CALM,CAOT,CACE,wCACE,2BACE,GAAG,CAAEd,UAAU,CAAC,CAACO,CAAD,CAAMS,CAAN,CAAD,CADjB,CAEE,SAAS,CAAEZ,eAAe,CAAC,QAAD,CAF5B,CAGE,KAAK,CAAE,CAAEO,MAAM,CAANA,CAAF,CAHT,EAKE,oBAAC,MAAD,EACE,IAAI,CAAC,IADP,CAEE,IAAI,CAAC,QAFP,CAGE,IAAI,CAAC,OAHP,CAIE,QAAQ,GAJV,CAKE,QAAQ,CAAEvB,YALZ,CAME,OAAO,CAAE2B,CAAS,CAACsB,MANrB,CAOE,SAAS,CAAEb,CAPb,EALF,CADF,CAgBE,oBAAC,UAAD,EACE,GAAIV,CADN,CAEE,aAAa,GAFf,CAGE,OAAO,CAAEG,CAHX,CAIE,OAAO,CAAEhB,cAJX,EAMG,SAACqC,CAAD,QACC,qBAAC,OAAD,EACE,SAAS,CAAEtB,CADb,CAEE,MAAM,CAAE,CAAC,CAFX,CAGE,GAAG,CAAEC,CAHP,CAIE,SAAS,CAAC,gBAJZ,CAKE,cAAc,CAAEF,CAAS,CAACqB,GAL5B,CAME,cAAc,CAAC,eANjB,CAOE,SAAS,CAAEhC,eAAe,CAAC,SAAD,CAAY,CACpCF,mBAAmB,CAAC,CAAEoC,OAAO,CAAPA,CAAF,CAAWpB,SAAS,CAATA,CAAX,CAAD,CADiB,CAAZ,CAP5B,CAUE,cAAc,CAAEC,CAVlB,CAWE,kBAAkB,CAAE,CAClB,gBADkB,CAElB,eAFkB,CAGlB,cAHkB,CAIlB,aAJkB,CAKlB,YALkB,CAMlB,UANkB,CAXtB,EAoBE,oBAAC,OAAD,EACE,MAAM,GADR,CAEE,MAAM,GAFR,CAGE,IAAI,CAAEP,CAHR,CAIE,IAAI,CAAC,SAJP,CAKE,SAAS,CAAER,eAAe,CAAC,SAAD,CAL5B,EAOGI,CAAK,CAAC+B,GAAN,CAAU,SAACC,CAAD,CAAOC,CAAP,QACT,4BACE,GAAG,CAAE/B,CAAY,CAAC8B,CAAD,CADnB,CAEE,SAAS,CAAEpC,eAAe,CAAC,MAAD,CAAS,CACjCsC,MAAM,CAAEtB,CAAc,GAAKqB,CADM,CAAT,CAF5B,EAMGhC,CAAU,CAAC+B,CAAD,CAAOzB,CAAS,CAACqB,GAAjB,IANb,CADS,CAAV,CAPH,CApBF,CADD,CANH,CAhBF,CAkEH,C,CAED,MAAO,IAAMO,cAAa,CAAGrD,UAAU,CACrCe,mBADqC,CAAhC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TabsTab.js","names":["React","forwardRef","ListItem","mapItemVerticalPadding","useForkRef","cnMixFocus","cn","cnTabsTab","TabsTabRender","props","ref","label","onChange","checked","size","onlyIcon","icon","iconSize","leftIcon","leftSide","tabRef","className","as","Tag","rightIcon","rightSide","disabled","renderInDropdown","otherProps","currentRef","before","toString","pV","TabsTab"],"sources":["../../../../../../src/components/Tabs/TabsTab/TabsTab.tsx"],"sourcesContent":["import './TabsTab.css';\n\nimport React, { forwardRef } from 'react';\n\nimport { ListItem, mapItemVerticalPadding } from '##/components/ListCanary';\nimport { useForkRef } from '##/hooks/useForkRef';\nimport { cnMixFocus } from '##/mixs/MixFocus';\nimport { cn } from '##/utils/bem';\n\nimport { TabsTabComponent, TabsTabProps } from '../types';\n\nexport const cnTabsTab = cn('TabsTab');\n\nconst TabsTabRender = (\n props: TabsTabProps,\n ref: React.Ref<HTMLButtonElement>,\n) => {\n const {\n label,\n onChange,\n checked,\n size,\n onlyIcon,\n icon,\n iconSize,\n leftIcon,\n leftSide,\n tabRef,\n className,\n as: Tag = 'button',\n rightIcon,\n rightSide,\n disabled,\n renderInDropdown,\n ...otherProps\n } = props;\n\n const currentRef = useForkRef([ref, tabRef]);\n\n return (\n <ListItem\n as={Tag}\n className={cnTabsTab({ checked, onlyIcon, renderInDropdown, disabled }, [\n !disabled ? cnMixFocus({ before: true }) : undefined,\n className,\n ])}\n role=\"tab\"\n type=\"button\"\n tabIndex={disabled ? -1 : undefined}\n ref={currentRef}\n title={onlyIcon ? label.toString() : undefined}\n label={onlyIcon ? undefined : label.toString()}\n onClick={checked ? undefined : onChange}\n leftIcon={onlyIcon ? leftIcon || icon || rightIcon : leftIcon || icon}\n leftSide={onlyIcon ? undefined : leftSide}\n rightIcon={onlyIcon ? undefined : rightIcon}\n rightSide={onlyIcon ? undefined : rightSide}\n iconSize={iconSize}\n disabled={disabled}\n size={size}\n space={{\n pV: mapItemVerticalPadding ? mapItemVerticalPadding[size] : 'xs',\n }}\n {...otherProps}\n />\n );\n};\n\nexport const TabsTab = forwardRef(TabsTabRender) as TabsTabComponent;\n"],"mappings":"4QAAA,sBAEA,MAAOA,MAAP,EAAgBC,UAAhB,KAAkC,OAAlC,CAEA,OAASC,QAAT,CAAmBC,sBAAnB,wBACA,OAASC,UAAT,iCACA,OAASC,UAAT,8BACA,OAASC,EAAT,0BAIA,MAAO,IAAMC,UAAS,CAAGD,EAAE,CAAC,SAAD,CAApB,CAEP,GAAME,cAAa,CAAG,SACpBC,CADoB,CAEpBC,CAFoB,CAGjB,IAEDC,EAFC,CAmBCF,CAnBD,CAEDE,KAFC,CAGDC,CAHC,CAmBCH,CAnBD,CAGDG,QAHC,CAIDC,CAJC,CAmBCJ,CAnBD,CAIDI,OAJC,CAKDC,CALC,CAmBCL,CAnBD,CAKDK,IALC,CAMDC,CANC,CAmBCN,CAnBD,CAMDM,QANC,CAODC,CAPC,CAmBCP,CAnBD,CAODO,IAPC,CAQDC,CARC,CAmBCR,CAnBD,CAQDQ,QARC,CASDC,CATC,CAmBCT,CAnBD,CASDS,QATC,CAUDC,CAVC,CAmBCV,CAnBD,CAUDU,QAVC,CAWDC,CAXC,CAmBCX,CAnBD,CAWDW,MAXC,CAYDC,CAZC,CAmBCZ,CAnBD,CAYDY,SAZC,GAmBCZ,CAnBD,CAaDa,EAbC,CAaGC,CAbH,YAaS,QAbT,GAcDC,CAdC,CAmBCf,CAnBD,CAcDe,SAdC,CAeDC,CAfC,CAmBChB,CAnBD,CAeDgB,SAfC,CAgBDC,CAhBC,CAmBCjB,CAnBD,CAgBDiB,QAhBC,CAiBDC,CAjBC,CAmBClB,CAnBD,CAiBDkB,gBAjBC,CAkBEC,CAlBF,0BAmBCnB,CAnBD,YAqBGoB,CAAU,CAAGzB,UAAU,CAAC,CAACM,CAAD,CAAMU,CAAN,CAAD,CArB1B,CAuBH,MACE,qBAAC,QAAD,gBACE,EAAE,CAAEG,CADN,CAEE,SAAS,CAAEhB,SAAS,CAAC,CAAEM,OAAO,CAAPA,CAAF,CAAWE,QAAQ,CAARA,CAAX,CAAqBY,gBAAgB,CAAhBA,CAArB,CAAuCD,QAAQ,CAARA,CAAvC,CAAD,CAAoD,CACrEA,CAAD,QAAYrB,UAAU,CAAC,CAAEyB,MAAM,GAAR,CAAD,CADgD,CAEtET,CAFsE,CAApD,CAFtB,CAME,IAAI,CAAC,KANP,CAOE,IAAI,CAAC,QAPP,CAQE,QAAQ,CAAEK,CAAQ,CAAG,CAAC,CAAJ,OARpB,CASE,GAAG,CAAEG,CATP,CAUE,KAAK,CAAEd,CAAQ,CAAGJ,CAAK,CAACoB,QAAN,EAAH,OAVjB,CAWE,KAAK,CAAEhB,CAAQ,QAAeJ,CAAK,CAACoB,QAAN,EAXhC,CAYE,OAAO,CAAElB,CAAO,QAAeD,CAZjC,CAaE,QAAQ,CAAEG,CAAQ,CAAGG,CAAQ,EAAIF,CAAZ,EAAoBQ,CAAvB,CAAmCN,CAAQ,EAAIF,CAbnE,CAcE,QAAQ,CAAED,CAAQ,QAAeI,CAdnC,CAeE,SAAS,CAAEJ,CAAQ,QAAeS,CAfpC,CAgBE,SAAS,CAAET,CAAQ,QAAeU,CAhBpC,CAiBE,QAAQ,CAAER,CAjBZ,CAkBE,QAAQ,CAAES,CAlBZ,CAmBE,IAAI,CAAEZ,CAnBR,CAoBE,KAAK,CAAE,CACLkB,EAAE,CAAE7B,sBAAsB,CAAGA,sBAAsB,CAACW,CAAD,CAAzB,CAAkC,IADvD,CApBT,EAuBMc,CAvBN,EA0BH,CArDD,CAuDA,MAAO,IAAMK,QAAO,CAAGhC,UAAU,CAACO,aAAD,CAA1B"}
|