@juspay/blend-design-system 0.0.37-beta.3 → 0.0.37-beta.4
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/dist/components/AccordionV2/index.d.ts +3 -0
- package/dist/components/AvatarV2/avatarV2.utils.d.ts +1 -1
- package/dist/components/AvatarV2/index.d.ts +1 -2
- package/dist/components/BreadcrumbV2/index.d.ts +10 -0
- package/dist/components/ButtonV2/ButtonGroupV2/index.d.ts +1 -0
- package/dist/components/ButtonV2/buttonV2.types.d.ts +0 -4
- package/dist/components/ButtonV2/index.d.ts +3 -0
- package/dist/components/ButtonV2/utils.d.ts +1 -1
- package/dist/components/ChartsV2/index.d.ts +5 -0
- package/dist/components/CodeEditorV2/CodeEditorV2.d.ts +1 -1
- package/dist/components/CodeEditorV2/codeEditorV2.tokens.d.ts +5 -5
- package/dist/components/CodeEditorV2/codeEditorV2.types.d.ts +5 -5
- package/dist/components/CodeEditorV2/index.d.ts +2 -0
- package/dist/components/CodeEditorV2/utils.d.ts +1 -1
- package/dist/components/DataTable/DataTable.d.ts +2 -1
- package/dist/components/DataTable/PivotTableModal/PivotPreviewPanel.d.ts +3 -0
- package/dist/components/DataTable/PivotTableModal/PivotTableIllustration.d.ts +7 -0
- package/dist/components/DataTable/PivotTableModal/index.d.ts +3 -0
- package/dist/components/DataTable/PivotTableModal/pivotModalStyleTokens.d.ts +123 -0
- package/dist/components/DataTable/PivotTableModal/types.d.ts +62 -0
- package/dist/components/DataTable/PivotTableModal/utils.d.ts +32 -0
- package/dist/components/DataTable/TableBody/types.d.ts +2 -0
- package/dist/components/DataTable/TableHeader/types.d.ts +1 -0
- package/dist/components/DataTable/index.d.ts +2 -0
- package/dist/components/DataTable/types.d.ts +56 -0
- package/dist/components/DataTable/utils.d.ts +19 -1
- package/dist/components/InputsV2/ChatInputV2/AttachmentDropdown.d.ts +3 -3
- package/dist/components/InputsV2/ChatInputV2/ChatInputTagV2.d.ts +2 -2
- package/dist/components/InputsV2/ChatInputV2/ChatInputV2.d.ts +4 -4
- package/dist/components/InputsV2/ChatInputV2/ChatInputV2.types.d.ts +8 -8
- package/dist/components/InputsV2/ChatInputV2/ChatInputV2AttachmentRow.d.ts +3 -3
- package/dist/components/InputsV2/ChatInputV2/MobileChatInputV2.d.ts +2 -2
- package/dist/components/InputsV2/ChatInputV2/utils.d.ts +4 -4
- package/dist/components/InputsV2/SearchInputV2/utils.d.ts +39 -0
- package/dist/components/InputsV2/TextInputV2/TextInputV2.types.d.ts +2 -2
- package/dist/components/InputsV2/TextInputV2/index.d.ts +2 -0
- package/dist/components/InputsV2/utils/utils.d.ts +1 -1
- package/dist/components/KeyValuePairV2/KeyValuePairV2.d.ts +1 -1
- package/dist/components/KeyValuePairV2/ResponsiveText.d.ts +2 -2
- package/dist/components/KeyValuePairV2/index.d.ts +3 -0
- package/dist/components/KeyValuePairV2/keyValuePairV2.types.d.ts +2 -2
- package/dist/components/KeyValuePairV2/responsiveTextStyles.d.ts +3 -3
- package/dist/components/KeyValuePairV2/utils.d.ts +2 -2
- package/dist/components/MenuV2/index.d.ts +1 -0
- package/dist/components/MenuV2/menuV2.utils.d.ts +2 -2
- package/dist/components/MultiSelectV2/index.d.ts +3 -0
- package/dist/components/MultiSelectV2/multiSelectV2.types.d.ts +1 -1
- package/dist/components/MultiSelectV2/utils.d.ts +2 -2
- package/dist/components/ProgressBarV2/index.d.ts +3 -0
- package/dist/components/ProgressBarV2/utils.d.ts +1 -1
- package/dist/components/SelectV2/index.d.ts +1 -0
- package/dist/components/SelectorV2/CheckboxV2/index.d.ts +4 -0
- package/dist/components/SelectorV2/CheckboxV2/utils.d.ts +1 -1
- package/dist/components/SelectorV2/RadioV2/index.d.ts +3 -0
- package/dist/components/SelectorV2/SwitchV2/index.d.ts +1 -0
- package/dist/components/SidebarV2/index.d.ts +5 -0
- package/dist/components/SingleSelectV2/SingleSelectV2VirtualList.d.ts +2 -2
- package/dist/components/SingleSelectV2/index.d.ts +3 -0
- package/dist/components/SingleSelectV2/singleSelectV2.types.d.ts +2 -2
- package/dist/components/SingleSelectV2/utils.d.ts +6 -6
- package/dist/components/StatCardV2/index.d.ts +10 -1
- package/dist/components/StepperV2/index.d.ts +3 -1
- package/dist/components/StepperV2/stepperV2.types.d.ts +2 -2
- package/dist/components/TabsV2/index.d.ts +3 -1
- package/dist/components/TagV2/index.d.ts +3 -0
- package/dist/components/TooltipV2/index.d.ts +1 -0
- package/dist/components/common/index.d.ts +1 -1
- package/dist/main.d.ts +30 -70
- package/dist/main.js +87817 -85412
- package/dist/{node-CRWdZOVN.js → node-C2uf3sNA.js} +1303 -1300
- package/dist/node.js +1 -1
- package/dist/tokens.js +1 -1
- package/lib/components/AccordionV2/index.ts +3 -0
- package/lib/components/AvatarV2/AvatarV2.tsx +2 -2
- package/lib/components/AvatarV2/avatarV2.utils.ts +1 -1
- package/lib/components/AvatarV2/index.ts +1 -12
- package/lib/components/BreadcrumbV2/index.ts +10 -0
- package/lib/components/ButtonV2/ButtonGroupV2/index.ts +1 -0
- package/lib/components/ButtonV2/ButtonV2.tsx +2 -2
- package/lib/components/ButtonV2/LinkButton.tsx +2 -2
- package/lib/components/ButtonV2/buttonV2.types.ts +0 -6
- package/lib/components/ButtonV2/index.ts +3 -0
- package/lib/components/ButtonV2/utils.ts +2 -2
- package/lib/components/Charts/BlendChart.tsx +1 -1
- package/lib/components/ChartsV2/ChartV2.tsx +3 -2
- package/lib/components/ChartsV2/index.ts +5 -0
- package/lib/components/CodeEditorV2/CodeEditorV2.tsx +2 -2
- package/lib/components/CodeEditorV2/codeEditorV2.dark.tokens.ts +37 -25
- package/lib/components/CodeEditorV2/codeEditorV2.light.token.ts +37 -25
- package/lib/components/CodeEditorV2/codeEditorV2.tokens.ts +5 -5
- package/lib/components/CodeEditorV2/codeEditorV2.types.ts +5 -5
- package/lib/components/CodeEditorV2/index.ts +2 -0
- package/lib/components/CodeEditorV2/utils.ts +1 -1
- package/lib/components/DataTable/DataTable.tsx +148 -4
- package/lib/components/DataTable/PivotTableModal/PivotPreviewPanel.tsx +174 -0
- package/lib/components/DataTable/PivotTableModal/PivotTableIllustration.tsx +28 -0
- package/lib/components/DataTable/PivotTableModal/index.tsx +859 -0
- package/lib/components/DataTable/PivotTableModal/pivot-table-illustration.png +0 -0
- package/lib/components/DataTable/PivotTableModal/pivotModal.styled.ts +13 -0
- package/lib/components/DataTable/PivotTableModal/pivotModalStyleTokens.ts +250 -0
- package/lib/components/DataTable/PivotTableModal/types.ts +69 -0
- package/lib/components/DataTable/PivotTableModal/utils.ts +360 -0
- package/lib/components/DataTable/TableBody/index.tsx +16 -5
- package/lib/components/DataTable/TableBody/types.ts +2 -0
- package/lib/components/DataTable/TableHeader/index.tsx +6 -3
- package/lib/components/DataTable/TableHeader/types.ts +1 -0
- package/lib/components/DataTable/index.ts +4 -0
- package/lib/components/DataTable/types.ts +57 -0
- package/lib/components/DataTable/utils.ts +197 -0
- package/lib/components/InputsV2/ChatInputV2/AttachmentDropdown.tsx +3 -3
- package/lib/components/InputsV2/ChatInputV2/ChatInputTagV2.tsx +3 -3
- package/lib/components/InputsV2/ChatInputV2/ChatInputV2.types.ts +8 -8
- package/lib/components/InputsV2/ChatInputV2/ChatInputV2AttachmentRow.tsx +7 -7
- package/lib/components/InputsV2/ChatInputV2/utils.ts +8 -8
- package/lib/components/InputsV2/SearchInputV2/utils.ts +14 -1
- package/lib/components/InputsV2/TextInputV2/TextInputV2.tsx +3 -3
- package/lib/components/InputsV2/TextInputV2/TextInputV2.types.ts +2 -2
- package/lib/components/InputsV2/TextInputV2/index.ts +2 -0
- package/lib/components/KeyValuePairV2/KeyValuePairV2.tsx +6 -2
- package/lib/components/KeyValuePairV2/ResponsiveText.tsx +2 -2
- package/lib/components/KeyValuePairV2/index.ts +3 -0
- package/lib/components/KeyValuePairV2/keyValuePairV2.types.ts +2 -2
- package/lib/components/KeyValuePairV2/responsiveTextStyles.ts +3 -3
- package/lib/components/KeyValuePairV2/utils.ts +3 -3
- package/lib/components/MenuV2/MenuV2.tsx +2 -2
- package/lib/components/MenuV2/MenuV2SubMenu.tsx +2 -2
- package/lib/components/MenuV2/index.ts +1 -0
- package/lib/components/MenuV2/menuV2.utils.ts +4 -4
- package/lib/components/MultiSelectV2/MultiSelectV2.tsx +2 -2
- package/lib/components/MultiSelectV2/MultiSelectV2Menu.tsx +5 -2
- package/lib/components/MultiSelectV2/index.ts +3 -0
- package/lib/components/MultiSelectV2/mobile/MobileMultiSelectV2.tsx +7 -4
- package/lib/components/MultiSelectV2/multiSelectV2.types.ts +1 -1
- package/lib/components/MultiSelectV2/utils.ts +2 -2
- package/lib/components/ProgressBarV2/ProgressBarV2.tsx +5 -2
- package/lib/components/ProgressBarV2/index.ts +3 -0
- package/lib/components/ProgressBarV2/utils.ts +1 -1
- package/lib/components/SelectV2/index.ts +1 -0
- package/lib/components/SelectorV2/CheckboxV2/CheckboxV2.tsx +2 -2
- package/lib/components/SelectorV2/CheckboxV2/index.ts +4 -0
- package/lib/components/SelectorV2/CheckboxV2/utils.ts +1 -1
- package/lib/components/SelectorV2/RadioV2/index.ts +3 -0
- package/lib/components/SelectorV2/SwitchV2/index.ts +1 -0
- package/lib/components/Sidebar/Sidebar.tsx +7 -2
- package/lib/components/SidebarV2/index.ts +5 -0
- package/lib/components/SingleSelectV2/MobileSingleSelectV2.tsx +2 -2
- package/lib/components/SingleSelectV2/SingleSelectV2.tsx +10 -3
- package/lib/components/SingleSelectV2/SingleSelectV2Menu.tsx +4 -2
- package/lib/components/SingleSelectV2/SingleSelectV2VirtualList.tsx +5 -2
- package/lib/components/SingleSelectV2/index.ts +7 -0
- package/lib/components/SingleSelectV2/singleSelectV2.types.ts +2 -2
- package/lib/components/SingleSelectV2/utils.ts +10 -10
- package/lib/components/StatCardV2/index.ts +13 -1
- package/lib/components/StepperV2/index.ts +3 -1
- package/lib/components/StepperV2/stepperV2.types.ts +2 -2
- package/lib/components/TabsV2/index.ts +13 -1
- package/lib/components/TagV2/index.ts +3 -0
- package/lib/components/TooltipV2/index.ts +1 -0
- package/lib/components/common/index.ts +1 -1
- package/lib/main.ts +34 -258
- package/lib/types/assets.d.ts +24 -0
- package/package.json +2 -1
|
@@ -1,4 +1,7 @@
|
|
|
1
1
|
export { default as AccordionV2 } from './AccordionV2';
|
|
2
2
|
export { AccordionV2Item } from './AccordionV2Item';
|
|
3
|
+
export { AccordionV2Chevron } from './AccordionV2Chevron';
|
|
4
|
+
export { AccordionV2TriggerContent } from './AccordionV2TriggerContent';
|
|
5
|
+
export * from './accordionV2.animations';
|
|
3
6
|
export * from './accordionV2.tokens';
|
|
4
7
|
export * from './accordionV2.types';
|
|
@@ -21,5 +21,5 @@ export declare function getStatusPositionStyles(position: AvatarV2StatusPosition
|
|
|
21
21
|
bottom?: string;
|
|
22
22
|
left?: string;
|
|
23
23
|
};
|
|
24
|
-
export declare function
|
|
24
|
+
export declare function createAvatarKeyboardHandler(onClick: ((event: React.MouseEvent<HTMLDivElement>) => void) | undefined): ((e: React.KeyboardEvent<HTMLDivElement>) => void) | undefined;
|
|
25
25
|
export declare function isInteractive(onClick: ((event: React.MouseEvent<HTMLDivElement>) => void) | undefined): boolean;
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
export { default as AvatarV2 } from './AvatarV2';
|
|
2
|
-
export
|
|
3
|
-
export { AvatarV2Size, AvatarV2Shape, AvatarV2Status, AvatarV2StatusPosition, AvatarV2Variant, } from './avatarV2.types';
|
|
2
|
+
export * from './avatarV2.types';
|
|
4
3
|
export * from './avatarV2.tokens';
|
|
5
4
|
export * from './avatarV2.utils';
|
|
@@ -1,3 +1,13 @@
|
|
|
1
1
|
export { default as BreadcrumbV2 } from './BreadcrumbV2';
|
|
2
|
+
export { default as BreadcrumbV2Icon } from './BreadcrumbV2Icon';
|
|
3
|
+
export { default as BreadcrumbV2Item } from './BreadcrumbV2Item';
|
|
4
|
+
export { default as BreadcrumbV2List } from './BreadcrumbV2List';
|
|
5
|
+
export type { BreadcrumbV2ListProps } from './BreadcrumbV2List';
|
|
6
|
+
export { default as BreadcrumbV2OverflowMenu } from './BreadcrumbV2OverflowMenu';
|
|
7
|
+
export type { BreadcrumbV2OverflowMenuProps } from './BreadcrumbV2OverflowMenu';
|
|
8
|
+
export { default as BreadcrumbV2Page } from './BreadcrumbV2Page';
|
|
9
|
+
export type { BreadcrumbV2PageProps } from './BreadcrumbV2Page';
|
|
10
|
+
export { default as BreadcrumbV2Separator } from './BreadcrumbV2Separator';
|
|
2
11
|
export * from './breadcrumbV2.tokens';
|
|
3
12
|
export * from './breadcrumbV2.types';
|
|
13
|
+
export * from './utils';
|
|
@@ -28,10 +28,6 @@ export declare enum PaddingDirection {
|
|
|
28
28
|
BOTTOM = "bottom",
|
|
29
29
|
LEFT = "left"
|
|
30
30
|
}
|
|
31
|
-
export declare const ButtonType: typeof ButtonV2Type;
|
|
32
|
-
export declare const ButtonSize: typeof ButtonV2Size;
|
|
33
|
-
export declare const ButtonSubType: typeof ButtonV2SubType;
|
|
34
|
-
export declare const ButtonState: typeof ButtonV2State;
|
|
35
31
|
export type ButtonSlot = {
|
|
36
32
|
slot: React.ReactNode;
|
|
37
33
|
maxHeight?: string | number;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
export { default as ButtonV2 } from './ButtonV2';
|
|
2
|
+
export { renderButtonContent } from './ButtonV2';
|
|
2
3
|
export { default as IconButton } from './IconButton';
|
|
3
4
|
export { default as LinkButton } from './LinkButton';
|
|
4
5
|
export { ButtonGroupV2 } from './ButtonGroupV2';
|
|
@@ -6,3 +7,5 @@ export type { ButtonV2Props, LinkButtonProps } from './buttonV2.types';
|
|
|
6
7
|
export type { IconButtonProps } from './IconButton';
|
|
7
8
|
export type { ButtonGroupV2Props, ButtonGroupPosition } from './ButtonGroupV2';
|
|
8
9
|
export * from './buttonV2.types';
|
|
10
|
+
export * from './buttonV2.tokens';
|
|
11
|
+
export * from './utils';
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { MouseEvent } from 'react';
|
|
2
2
|
import { ButtonV2Size, ButtonV2State, ButtonV2SubType, ButtonV2Type } from './buttonV2.types';
|
|
3
3
|
import { ButtonV2TokensType } from './buttonV2.tokens';
|
|
4
|
-
export declare function
|
|
4
|
+
export declare function getButtonV2BorderRadius(size: ButtonV2Size, buttonType: ButtonV2Type, subType: ButtonV2SubType, buttonGroupPosition: 'center' | 'left' | 'right' | undefined, tokens: ButtonV2TokensType): string;
|
|
5
5
|
export declare function createButtonClickHandler(onClick?: (event?: MouseEvent<HTMLButtonElement>) => void, isSkeleton?: boolean, isDisabled?: boolean, isLoading?: boolean): (event: MouseEvent<HTMLButtonElement>) => void;
|
|
6
6
|
export declare function getButtonHeight(subType: ButtonV2SubType): string | undefined;
|
|
7
7
|
export declare function getIconMaxHeight(subType: ButtonV2SubType, leftSlotMaxHeight: string | number | undefined, rightSlotMaxHeight: string | number | undefined, size: ButtonV2Size): string;
|
|
@@ -7,3 +7,8 @@ export { default as ChartV2Skeleton } from './ChartV2Skeleton';
|
|
|
7
7
|
export { default as ChartV2NoData } from './ChartV2NoData';
|
|
8
8
|
export * from './chartV2.tokens';
|
|
9
9
|
export * from './chartV2.types';
|
|
10
|
+
export { useChartLegend } from './useChartLegend';
|
|
11
|
+
export { useChartLegendHover } from './useChartLegendHover';
|
|
12
|
+
export { default as useChartRefs } from './useChartRefs';
|
|
13
|
+
export { getLegendItems, applyHoverState } from './utils';
|
|
14
|
+
export { mergeChartOptions } from './chartV2Options';
|
|
@@ -11,7 +11,7 @@ declare const CodeEditorV2: import('react').ForwardRefExoticComponent<{
|
|
|
11
11
|
rightSlot?: import('react').ReactNode;
|
|
12
12
|
showCopyButton?: boolean;
|
|
13
13
|
};
|
|
14
|
-
language?: import('./codeEditorV2.types').
|
|
14
|
+
language?: import('./codeEditorV2.types').CodeEditorV2SupportedLanguage;
|
|
15
15
|
placeholder?: string;
|
|
16
16
|
readOnly?: boolean;
|
|
17
17
|
disabled?: boolean;
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { CSSObject } from 'styled-components';
|
|
2
|
-
import { DiffLineType } from './codeEditorV2.types';
|
|
3
2
|
import { BreakpointType } from '../../breakpoints/breakPoints';
|
|
4
3
|
import { FoundationTokenType } from '../../tokens/theme.token';
|
|
5
4
|
import { Theme } from '../../context/theme.enum';
|
|
5
|
+
import { CodeEditorV2DiffLineType } from './codeEditorV2.types';
|
|
6
6
|
export type CodeEditorV2Tokens = {
|
|
7
7
|
backgroundColor: CSSObject['backgroundColor'];
|
|
8
8
|
border: CSSObject['border'];
|
|
@@ -37,13 +37,13 @@ export type CodeEditorV2Tokens = {
|
|
|
37
37
|
width: CSSObject['width'];
|
|
38
38
|
color: CSSObject['color'];
|
|
39
39
|
backgroundColor: {
|
|
40
|
-
[key in
|
|
40
|
+
[key in CodeEditorV2DiffLineType]: CSSObject['backgroundColor'];
|
|
41
41
|
};
|
|
42
42
|
borderLeft: {
|
|
43
|
-
[key in
|
|
43
|
+
[key in CodeEditorV2DiffLineType]: CSSObject['borderLeft'];
|
|
44
44
|
};
|
|
45
45
|
borderColor: {
|
|
46
|
-
[key in
|
|
46
|
+
[key in CodeEditorV2DiffLineType]: CSSObject['color'];
|
|
47
47
|
};
|
|
48
48
|
};
|
|
49
49
|
code: {
|
|
@@ -57,7 +57,7 @@ export type CodeEditorV2Tokens = {
|
|
|
57
57
|
};
|
|
58
58
|
highlightedLine: {
|
|
59
59
|
backgroundColor: {
|
|
60
|
-
[key in
|
|
60
|
+
[key in CodeEditorV2DiffLineType]: CSSObject['backgroundColor'];
|
|
61
61
|
};
|
|
62
62
|
};
|
|
63
63
|
syntax: {
|
|
@@ -10,16 +10,16 @@ export declare enum MonacoTheme {
|
|
|
10
10
|
LIGHT = "light",
|
|
11
11
|
DARK = "dark"
|
|
12
12
|
}
|
|
13
|
-
export declare enum
|
|
13
|
+
export declare enum CodeEditorV2DiffLineType {
|
|
14
14
|
ADDED = "added",
|
|
15
15
|
REMOVED = "removed",
|
|
16
16
|
UNCHANGED = "unchanged"
|
|
17
17
|
}
|
|
18
|
-
export type
|
|
18
|
+
export type CodeEditorV2DiffLine = {
|
|
19
19
|
content: string;
|
|
20
|
-
type:
|
|
20
|
+
type: CodeEditorV2DiffLineType;
|
|
21
21
|
};
|
|
22
|
-
export type
|
|
22
|
+
export type CodeEditorV2SupportedLanguage = 'javascript' | 'typescript' | 'jsx' | 'tsx' | 'json' | 'css' | 'html' | 'markdown' | 'yaml' | 'python' | 'rust' | 'haskell';
|
|
23
23
|
export type CodeEditorV2Dimensions = {
|
|
24
24
|
width?: CSSObject['width'];
|
|
25
25
|
maxWidth?: CSSObject['maxWidth'];
|
|
@@ -41,7 +41,7 @@ export type CodeEditorV2Props = {
|
|
|
41
41
|
rightSlot?: ReactNode;
|
|
42
42
|
showCopyButton?: boolean;
|
|
43
43
|
};
|
|
44
|
-
language?:
|
|
44
|
+
language?: CodeEditorV2SupportedLanguage;
|
|
45
45
|
placeholder?: string;
|
|
46
46
|
readOnly?: boolean;
|
|
47
47
|
disabled?: boolean;
|
|
@@ -22,7 +22,7 @@ export declare const isDiffEditorMode: (diff: boolean | undefined, variant: Code
|
|
|
22
22
|
/**
|
|
23
23
|
* Calculates container styles with min/max height
|
|
24
24
|
*/
|
|
25
|
-
export declare const
|
|
25
|
+
export declare const getCodeEditorV2ContainerStyles: (minHeight?: string | number, maxHeight?: string | number) => React.CSSProperties;
|
|
26
26
|
export declare const toCssValue: (value?: string | number) => string | undefined;
|
|
27
27
|
export declare const toNumericValue: (value: string | number | undefined, fallback?: number) => number;
|
|
28
28
|
export type EditorMetrics = {
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { default as React } from 'react';
|
|
1
2
|
import { DataTableProps } from './types';
|
|
2
|
-
declare const DataTable:
|
|
3
|
+
declare const DataTable: React.ForwardRefExoticComponent<DataTableProps<Record<string, unknown>> & React.RefAttributes<HTMLDivElement>>;
|
|
3
4
|
export default DataTable;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pivot Table Illustration Component
|
|
3
|
+
* Displays when no pivot configuration is set
|
|
4
|
+
* Uses optimized PNG illustration with proper sizing
|
|
5
|
+
*/
|
|
6
|
+
export declare const PivotTableIllustration: () => import("react/jsx-runtime").JSX.Element;
|
|
7
|
+
export default PivotTableIllustration;
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
import { FoundationTokenType } from '../../../tokens/theme.token';
|
|
2
|
+
import { TableTokenType } from '../dataTable.tokens';
|
|
3
|
+
export type PivotModalStyleTokens = {
|
|
4
|
+
modal: {
|
|
5
|
+
minWidth: string;
|
|
6
|
+
maxWidth: string;
|
|
7
|
+
maxHeight: string;
|
|
8
|
+
bodyPadding: string;
|
|
9
|
+
bodyGap: string;
|
|
10
|
+
};
|
|
11
|
+
rightPanel: {
|
|
12
|
+
width: string;
|
|
13
|
+
padding: string;
|
|
14
|
+
background: string;
|
|
15
|
+
border: string;
|
|
16
|
+
borderRadius: string;
|
|
17
|
+
};
|
|
18
|
+
shell: {
|
|
19
|
+
display: 'grid';
|
|
20
|
+
gridTemplateColumns: string;
|
|
21
|
+
height: string;
|
|
22
|
+
overflow: 'hidden';
|
|
23
|
+
};
|
|
24
|
+
layout: {
|
|
25
|
+
wideDesktopMinWidth: number;
|
|
26
|
+
wideDesktopColumns: string;
|
|
27
|
+
fallbackColumns: string;
|
|
28
|
+
};
|
|
29
|
+
panelPadding: string;
|
|
30
|
+
configPanelBackground: string;
|
|
31
|
+
previewPanelBackground: string;
|
|
32
|
+
text: {
|
|
33
|
+
sectionTitle: {
|
|
34
|
+
fontSize: string;
|
|
35
|
+
fontWeight: number;
|
|
36
|
+
color: string;
|
|
37
|
+
};
|
|
38
|
+
fieldLabel: {
|
|
39
|
+
fontSize: string;
|
|
40
|
+
fontWeight: number;
|
|
41
|
+
color: string;
|
|
42
|
+
};
|
|
43
|
+
checkboxLabel: {
|
|
44
|
+
fontSize: string;
|
|
45
|
+
color: string;
|
|
46
|
+
};
|
|
47
|
+
};
|
|
48
|
+
spacing: {
|
|
49
|
+
sectionGap: string;
|
|
50
|
+
builderIntroGap: string;
|
|
51
|
+
stackGap: string;
|
|
52
|
+
controlsRowGap: string;
|
|
53
|
+
iconBadgeGap: string;
|
|
54
|
+
sectionHeaderMarginBottom: string;
|
|
55
|
+
};
|
|
56
|
+
dropZone: {
|
|
57
|
+
emptyMinHeight: string;
|
|
58
|
+
padding: string;
|
|
59
|
+
borderRadius: string;
|
|
60
|
+
border: string;
|
|
61
|
+
background: string;
|
|
62
|
+
};
|
|
63
|
+
chip: {
|
|
64
|
+
borderRadius: string;
|
|
65
|
+
padding: string;
|
|
66
|
+
hoverShadow: string;
|
|
67
|
+
hoverTranslateY: string;
|
|
68
|
+
transition: string;
|
|
69
|
+
};
|
|
70
|
+
iconBadge: {
|
|
71
|
+
size: string;
|
|
72
|
+
borderRadius: string;
|
|
73
|
+
glyphFontSize: string | number;
|
|
74
|
+
glyphFontWeight: number;
|
|
75
|
+
};
|
|
76
|
+
sectionLabel: {
|
|
77
|
+
fontWeight: number;
|
|
78
|
+
fontSize: string | number;
|
|
79
|
+
textTransform: 'uppercase';
|
|
80
|
+
letterSpacing: string;
|
|
81
|
+
};
|
|
82
|
+
sectionCount: {
|
|
83
|
+
fontSize: string | number;
|
|
84
|
+
color: string;
|
|
85
|
+
};
|
|
86
|
+
emptyState: {
|
|
87
|
+
titleFontSize: string | number;
|
|
88
|
+
titleColor: string;
|
|
89
|
+
exampleFontSize: string | number;
|
|
90
|
+
exampleColor: string;
|
|
91
|
+
padding: string;
|
|
92
|
+
titleMarginBottom: string;
|
|
93
|
+
};
|
|
94
|
+
fieldRowLabel: {
|
|
95
|
+
fontSize: string | number;
|
|
96
|
+
color: string;
|
|
97
|
+
marginBottom: string;
|
|
98
|
+
};
|
|
99
|
+
removeButton: {
|
|
100
|
+
minWidth: string;
|
|
101
|
+
padding: string;
|
|
102
|
+
borderRadius: string;
|
|
103
|
+
border: string;
|
|
104
|
+
background: string;
|
|
105
|
+
hoverBackground: string;
|
|
106
|
+
iconColor: string;
|
|
107
|
+
iconSize: number;
|
|
108
|
+
};
|
|
109
|
+
menuCheckIconSize: number;
|
|
110
|
+
preview: {
|
|
111
|
+
headerMarginBottom: string;
|
|
112
|
+
titleFontWeight: number;
|
|
113
|
+
titleFontSize: string | number;
|
|
114
|
+
titleMarginBottom: string;
|
|
115
|
+
metaFontSize: string;
|
|
116
|
+
};
|
|
117
|
+
bodyLineHeight: string;
|
|
118
|
+
};
|
|
119
|
+
/**
|
|
120
|
+
* Layout and typography for the pivot modal, derived from foundation tokens + responsive table tokens.
|
|
121
|
+
* Section chips use `colors.primary` only (see color.tokens).
|
|
122
|
+
*/
|
|
123
|
+
export declare const getPivotModalStyleTokens: (f: FoundationTokenType, tableToken: TableTokenType) => PivotModalStyleTokens;
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { ReactNode } from 'react';
|
|
2
|
+
import { TableTokenType } from '../dataTable.tokens';
|
|
3
|
+
import { ColumnDefinition, PivotAggregationType } from '../types';
|
|
4
|
+
import { PivotModalStyleTokens } from './pivotModalStyleTokens';
|
|
5
|
+
export type PivotValueConfig<T extends Record<string, unknown>> = {
|
|
6
|
+
field: keyof T;
|
|
7
|
+
aggregation: PivotAggregationType;
|
|
8
|
+
};
|
|
9
|
+
export type PivotTableConfig<T extends Record<string, unknown>> = {
|
|
10
|
+
rows: Array<keyof T>;
|
|
11
|
+
columns: Array<keyof T>;
|
|
12
|
+
values: PivotValueConfig<T>[];
|
|
13
|
+
};
|
|
14
|
+
export type PivotTableModalProps<T extends Record<string, unknown>> = {
|
|
15
|
+
isOpen: boolean;
|
|
16
|
+
onClose: () => void;
|
|
17
|
+
data: T[];
|
|
18
|
+
columns: ColumnDefinition<T>[];
|
|
19
|
+
title?: string;
|
|
20
|
+
description?: string;
|
|
21
|
+
showExport?: boolean;
|
|
22
|
+
initialConfig?: Partial<PivotTableConfig<T>>;
|
|
23
|
+
previewColumns?: PivotPreviewColumn[];
|
|
24
|
+
previewRows?: PivotPreviewRow[];
|
|
25
|
+
onConfigChange?: (config: PivotTableConfig<T>) => void;
|
|
26
|
+
onExport?: (config: PivotTableConfig<T>) => void;
|
|
27
|
+
trigger?: ReactNode;
|
|
28
|
+
/**
|
|
29
|
+
* Callback when trigger is clicked. Use this to open the modal.
|
|
30
|
+
*/
|
|
31
|
+
onTriggerClick?: () => void;
|
|
32
|
+
/**
|
|
33
|
+
* Configure which aggregation operations are available in the Values section.
|
|
34
|
+
* If not provided, all operations will be shown.
|
|
35
|
+
* @example ['sum', 'count', 'average'] // Show only sum, count, and average
|
|
36
|
+
*/
|
|
37
|
+
availableAggregations?: PivotAggregationType[];
|
|
38
|
+
};
|
|
39
|
+
export type PivotPreviewColumn = {
|
|
40
|
+
key: string;
|
|
41
|
+
label: string;
|
|
42
|
+
};
|
|
43
|
+
export type PivotPreviewRow = Record<string, unknown> & {
|
|
44
|
+
__pivotId: string;
|
|
45
|
+
__pivotRowType?: 'data' | 'subtotal' | 'grand_total';
|
|
46
|
+
};
|
|
47
|
+
export type PivotPreviewPanelProps = {
|
|
48
|
+
pivot: PivotModalStyleTokens;
|
|
49
|
+
tableToken: TableTokenType;
|
|
50
|
+
showExport: boolean;
|
|
51
|
+
previewRows?: PivotPreviewRow[];
|
|
52
|
+
previewColumns?: PivotPreviewColumn[];
|
|
53
|
+
previewTableColumns: ColumnDefinition<Record<string, unknown>>[];
|
|
54
|
+
onExport: () => void;
|
|
55
|
+
hasValues: boolean;
|
|
56
|
+
};
|
|
57
|
+
export type PivotFieldConfig = {
|
|
58
|
+
field: string;
|
|
59
|
+
showTotal: boolean;
|
|
60
|
+
aggregation?: PivotAggregationType;
|
|
61
|
+
header?: string;
|
|
62
|
+
};
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { ColumnDefinition, PivotAggregationType } from '../types';
|
|
2
|
+
import { PivotPreviewColumn, PivotPreviewRow, PivotValueConfig } from './types';
|
|
3
|
+
export declare const normalizePivotValue: (value: unknown) => string;
|
|
4
|
+
export declare const getPivotFieldOptions: <T extends Record<string, unknown>>(columns: ColumnDefinition<T>[]) => Array<{
|
|
5
|
+
key: string;
|
|
6
|
+
label: string;
|
|
7
|
+
}>;
|
|
8
|
+
export declare const isPivotNumericValue: (value: unknown) => boolean;
|
|
9
|
+
export declare const getSupportedAggregationsForField: <T extends Record<string, unknown>>(data: T[], field: keyof T, allowedAggregations: PivotAggregationType[], isNumericColumn?: boolean) => PivotAggregationType[];
|
|
10
|
+
/**
|
|
11
|
+
* Builds the rectangular grid the modal preview renders as a {@link DataTable}.
|
|
12
|
+
*
|
|
13
|
+
* - **Columns:** First column key `__rowLabel` — header is joined row field names
|
|
14
|
+
* (or `All Rows`). Each unique combination of **column** dimension values
|
|
15
|
+
* becomes a group; for each group, every **value** config adds one column
|
|
16
|
+
* (`columnKey__field__aggregation`).
|
|
17
|
+
* - **Rows:** One row per distinct row-dimension key; cells are aggregated from
|
|
18
|
+
* raw rows that match that row key and column key.
|
|
19
|
+
* - **Grand total:** Appended last with `__pivotRowType: 'grand_total'` and
|
|
20
|
+
* `__rowLabel` `"Grand Total"`; each metric is aggregated over the full
|
|
21
|
+
* (already filtered) `data` for that column bucket.
|
|
22
|
+
*/
|
|
23
|
+
export declare const buildPivotPreview: <T extends Record<string, unknown>>(data: T[], rowFields: Array<keyof T> | Array<{
|
|
24
|
+
field: keyof T;
|
|
25
|
+
showTotal?: boolean;
|
|
26
|
+
}>, columnFields: Array<keyof T> | Array<{
|
|
27
|
+
field: keyof T;
|
|
28
|
+
showTotal?: boolean;
|
|
29
|
+
}>, valueConfigs: PivotValueConfig<T>[], fieldLabelByKey?: Record<string, string>) => {
|
|
30
|
+
columns: PivotPreviewColumn[];
|
|
31
|
+
rows: PivotPreviewRow[];
|
|
32
|
+
};
|
|
@@ -3,6 +3,7 @@ import { MobileDataTableConfig } from '../hooks/useMobileDataTable';
|
|
|
3
3
|
import { SkeletonVariant } from '../../Skeleton/skeleton.tokens';
|
|
4
4
|
export type TableBodyProps<T extends Record<string, unknown>> = {
|
|
5
5
|
currentData: T[];
|
|
6
|
+
dataVersion?: number | string;
|
|
6
7
|
visibleColumns: ColumnDefinition<T>[];
|
|
7
8
|
idField: string;
|
|
8
9
|
tableTitle?: string;
|
|
@@ -11,6 +12,7 @@ export type TableBodyProps<T extends Record<string, unknown>> = {
|
|
|
11
12
|
editValues: Record<string, T>;
|
|
12
13
|
expandedRows: Record<string, boolean>;
|
|
13
14
|
enableInlineEdit?: boolean;
|
|
15
|
+
showActionsColumn?: boolean;
|
|
14
16
|
enableColumnManager?: boolean;
|
|
15
17
|
enableRowExpansion?: boolean;
|
|
16
18
|
enableRowSelection?: boolean;
|
|
@@ -7,6 +7,7 @@ export type TableHeaderProps<T extends Record<string, unknown>> = {
|
|
|
7
7
|
selectAll: boolean | 'indeterminate';
|
|
8
8
|
sortConfig?: SortConfig | null;
|
|
9
9
|
enableInlineEdit?: boolean;
|
|
10
|
+
showActionsColumn?: boolean;
|
|
10
11
|
enableColumnManager?: boolean;
|
|
11
12
|
enableColumnReordering?: boolean;
|
|
12
13
|
showSkeleton?: boolean;
|
|
@@ -8,3 +8,5 @@ export * from './DataTableHeader/types';
|
|
|
8
8
|
export * from './dataTable.tokens';
|
|
9
9
|
export { validateColumnData, getColumnTypeConfig } from './columnTypes';
|
|
10
10
|
export type { ColumnFilterOption, SelectData, MultiSelectData, DateData, DateRangeData, TagData, ColumnDataTypeMap, GetColumnDataType, ColumnTypeConfig, AvatarData as DataTableAvatarData, } from './columnTypes';
|
|
11
|
+
export { default as PivotTableModal } from './PivotTableModal';
|
|
12
|
+
export * from './PivotTableModal/types';
|
|
@@ -31,6 +31,15 @@ export declare enum ColumnType {
|
|
|
31
31
|
SLIDER = "slider",
|
|
32
32
|
CUSTOM = "custom"
|
|
33
33
|
}
|
|
34
|
+
export declare enum PivotAggregationType {
|
|
35
|
+
SUM = "sum",
|
|
36
|
+
COUNT = "count",
|
|
37
|
+
AVERAGE = "average",
|
|
38
|
+
MEAN = "mean",
|
|
39
|
+
MEDIAN = "median",
|
|
40
|
+
MIN = "min",
|
|
41
|
+
MAX = "max"
|
|
42
|
+
}
|
|
34
43
|
export type AvatarColumnProps = {
|
|
35
44
|
src?: string;
|
|
36
45
|
alt?: string;
|
|
@@ -328,10 +337,12 @@ export type DataTableProps<T extends Record<string, unknown>> = {
|
|
|
328
337
|
headerSlot1?: ReactNode;
|
|
329
338
|
headerSlot2?: ReactNode;
|
|
330
339
|
enableInlineEdit?: boolean;
|
|
340
|
+
showActionsColumn?: boolean;
|
|
331
341
|
onRowSave?: (rowId: unknown, updatedRow: T) => void;
|
|
332
342
|
onRowCancel?: (rowId: unknown) => void;
|
|
333
343
|
onRowClick?: (row: T, index: number) => void;
|
|
334
344
|
onFieldChange?: (rowId: unknown, fieldName: keyof T, value: unknown) => void;
|
|
345
|
+
onHeaderChange?: (field: keyof T, newHeader: string) => void;
|
|
335
346
|
enableRowExpansion?: boolean;
|
|
336
347
|
renderExpandedRow?: (expandedData: {
|
|
337
348
|
row: T;
|
|
@@ -354,4 +365,49 @@ export type DataTableProps<T extends Record<string, unknown>> = {
|
|
|
354
365
|
getRowStyle?: (row: T, index: number) => React.CSSProperties;
|
|
355
366
|
tableBodyHeight?: string | number;
|
|
356
367
|
mobileColumnsToShow?: number;
|
|
368
|
+
enablePivotTable?: boolean;
|
|
369
|
+
pivotTableConfig?: {
|
|
370
|
+
triggerButton?: ReactNode;
|
|
371
|
+
triggerSlot?: 1 | 2 | 3;
|
|
372
|
+
title?: string;
|
|
373
|
+
description?: string;
|
|
374
|
+
showExport?: boolean;
|
|
375
|
+
initialConfig?: {
|
|
376
|
+
rows?: (keyof T)[];
|
|
377
|
+
columns?: (keyof T)[];
|
|
378
|
+
values?: Array<{
|
|
379
|
+
field: keyof T;
|
|
380
|
+
aggregation: PivotAggregationType;
|
|
381
|
+
}>;
|
|
382
|
+
};
|
|
383
|
+
previewColumns?: Array<{
|
|
384
|
+
key: string;
|
|
385
|
+
label: string;
|
|
386
|
+
}>;
|
|
387
|
+
previewRows?: Array<Record<string, unknown> & {
|
|
388
|
+
__pivotId: string;
|
|
389
|
+
}>;
|
|
390
|
+
/**
|
|
391
|
+
* Configure which aggregation operations are available in the Values section.
|
|
392
|
+
* If not provided, all operations will be shown.
|
|
393
|
+
* @example ['sum', 'count', 'average'] // Show only sum, count, and average
|
|
394
|
+
*/
|
|
395
|
+
availableAggregations?: PivotAggregationType[];
|
|
396
|
+
onConfigChange?: (config: {
|
|
397
|
+
rows: (keyof T)[];
|
|
398
|
+
columns: (keyof T)[];
|
|
399
|
+
values: Array<{
|
|
400
|
+
field: keyof T;
|
|
401
|
+
aggregation: PivotAggregationType;
|
|
402
|
+
}>;
|
|
403
|
+
}) => void;
|
|
404
|
+
onExport?: (config: {
|
|
405
|
+
rows: (keyof T)[];
|
|
406
|
+
columns: (keyof T)[];
|
|
407
|
+
values: Array<{
|
|
408
|
+
field: keyof T;
|
|
409
|
+
aggregation: PivotAggregationType;
|
|
410
|
+
}>;
|
|
411
|
+
}) => void;
|
|
412
|
+
};
|
|
357
413
|
};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { SortConfig, ColumnFilter, SearchConfig, FilterType, ColumnDefinition } from './types';
|
|
1
|
+
import { SortConfig, ColumnFilter, SearchConfig, FilterType, ColumnDefinition, PivotAggregationType } from './types';
|
|
2
2
|
import { AvatarData, TagData, SelectData, MultiSelectData, DateData, DateRangeData } from './columnTypes';
|
|
3
3
|
export declare const isDateOnlyString: (value: string) => boolean;
|
|
4
4
|
/**
|
|
@@ -58,3 +58,21 @@ export declare const enforceDataTypeMatching: <T extends Record<string, unknown>
|
|
|
58
58
|
throwOnError?: boolean;
|
|
59
59
|
logWarnings?: boolean;
|
|
60
60
|
}) => boolean;
|
|
61
|
+
type PivotValueConfig<T extends Record<string, unknown>> = {
|
|
62
|
+
field: keyof T;
|
|
63
|
+
aggregation: PivotAggregationType;
|
|
64
|
+
label?: string;
|
|
65
|
+
};
|
|
66
|
+
type PivotResultRow = Record<string, unknown>;
|
|
67
|
+
export declare const buildPivotData: <T extends Record<string, unknown>>(data: T[], rowFields: (keyof T)[], columnFields: (keyof T)[], valueConfigs: PivotValueConfig<T>[], filterValues?: Record<string, string[]>) => {
|
|
68
|
+
columns: Array<{
|
|
69
|
+
key: string;
|
|
70
|
+
label: string;
|
|
71
|
+
}>;
|
|
72
|
+
rows: PivotResultRow[];
|
|
73
|
+
};
|
|
74
|
+
export declare const exportPivotToCSV: (rows: PivotResultRow[], columns: Array<{
|
|
75
|
+
key: string;
|
|
76
|
+
label: string;
|
|
77
|
+
}>, filename: string) => void;
|
|
78
|
+
export {};
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { ChatInputV2TokensType } from './ChatInputV2.tokens';
|
|
2
|
-
import {
|
|
2
|
+
import { ChatInputV2AttachedFile } from './ChatInputV2.types';
|
|
3
3
|
type AttachmentDropdownV2Props = {
|
|
4
4
|
id?: string;
|
|
5
|
-
files:
|
|
5
|
+
files: ChatInputV2AttachedFile[];
|
|
6
6
|
onFileRemove: (fileId: string) => void;
|
|
7
7
|
tokens: ChatInputV2TokensType;
|
|
8
|
-
onFileClick: (file:
|
|
8
|
+
onFileClick: (file: ChatInputV2AttachedFile) => void;
|
|
9
9
|
};
|
|
10
10
|
declare const AttachmentDropdownV2: ({ id, files, onFileRemove, onFileClick, tokens, }: AttachmentDropdownV2Props) => import("react/jsx-runtime").JSX.Element;
|
|
11
11
|
export default AttachmentDropdownV2;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { ChatInputV2TokensType } from './ChatInputV2.tokens';
|
|
2
|
-
import {
|
|
2
|
+
import { ChatInputV2AttachedFile } from './ChatInputV2.types';
|
|
3
3
|
type ChatInputTagV2Props = {
|
|
4
4
|
text: string;
|
|
5
5
|
tokens: ChatInputV2TokensType['container']['tagContainer'];
|
|
@@ -7,7 +7,7 @@ type ChatInputTagV2Props = {
|
|
|
7
7
|
onRemove: () => void;
|
|
8
8
|
/** Fired after the file-name control handles `preventDefault` / `stopPropagation` (button). */
|
|
9
9
|
onFileClick: () => void;
|
|
10
|
-
file:
|
|
10
|
+
file: ChatInputV2AttachedFile;
|
|
11
11
|
};
|
|
12
12
|
declare const ChatInputTagV2: ({ file, text, tokens, onRemove, onFileClick, }: ChatInputTagV2Props) => import("react/jsx-runtime").JSX.Element;
|
|
13
13
|
export default ChatInputTagV2;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
declare const ChatInputV2: import('react').ForwardRefExoticComponent<{
|
|
2
2
|
value?: string;
|
|
3
|
-
topQueries?: import('./ChatInputV2.types').
|
|
4
|
-
onTopQuerySelect?: (query: import('./ChatInputV2.types').
|
|
3
|
+
topQueries?: import('./ChatInputV2.types').ChatInputV2TopQuery[];
|
|
4
|
+
onTopQuerySelect?: (query: import('./ChatInputV2.types').ChatInputV2TopQuery) => void;
|
|
5
5
|
placeholder?: string;
|
|
6
6
|
onChange: (value: string) => void;
|
|
7
7
|
topContent?: import('react').ReactNode;
|
|
@@ -10,10 +10,10 @@ declare const ChatInputV2: import('react').ForwardRefExoticComponent<{
|
|
|
10
10
|
topQueriesMaxHeight?: number;
|
|
11
11
|
textareaMaxHeight?: number;
|
|
12
12
|
disabled?: boolean;
|
|
13
|
-
attachedFiles?: import('./ChatInputV2.types').
|
|
13
|
+
attachedFiles?: import('./ChatInputV2.types').ChatInputV2AttachedFile[];
|
|
14
14
|
onAttachFiles?: (files: File[]) => void;
|
|
15
15
|
onFileRemove?: (fileId: string) => void;
|
|
16
|
-
onFileClick?: (file: import('./ChatInputV2.types').
|
|
16
|
+
onFileClick?: (file: import('./ChatInputV2.types').ChatInputV2AttachedFile) => void;
|
|
17
17
|
onEnter?: () => void;
|
|
18
18
|
} & Omit<import('react').TextareaHTMLAttributes<HTMLTextAreaElement>, "size" | "style" | "className" | "onFocus" | "onBlur" | "onChange" | "cols"> & import('react').RefAttributes<HTMLDivElement>>;
|
|
19
19
|
export default ChatInputV2;
|