@juspay/blend-design-system 0.0.24 → 0.0.25
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/Avatar/Avatar.d.ts +2 -1
- package/dist/components/Avatar/types.d.ts +5 -0
- package/dist/components/Breadcrumb/types.d.ts +6 -0
- package/dist/components/Button/Button.d.ts +1 -1
- package/dist/components/Button/button.tokens.d.ts +4 -1
- package/dist/components/Button/types.d.ts +1 -1
- package/dist/components/Checkbox/checkbox.animations.d.ts +2 -0
- package/dist/components/DataTable/TableHeader/DraggableColumnHeader.d.ts +9 -0
- package/dist/components/DataTable/TableHeader/index.d.ts +2 -1
- package/dist/components/DataTable/TableHeader/types.d.ts +2 -0
- package/dist/components/DataTable/types.d.ts +25 -6
- package/dist/components/DateRangePicker/TimeSelector.d.ts +0 -2
- package/dist/components/DateRangePicker/dateRangePicker.tokens.d.ts +7 -19
- package/dist/components/Directory/directory.tokens.d.ts +86 -0
- package/dist/components/Directory/types.d.ts +5 -0
- package/dist/components/Drawer/types.d.ts +16 -0
- package/dist/components/Inputs/MultiValueInput/MultiValueInput.d.ts +1 -1
- package/dist/components/Inputs/MultiValueInput/types.d.ts +3 -1
- package/dist/components/Menu/menu.animations.d.ts +8 -0
- package/dist/components/Modal/modal.animations.d.ts +3 -0
- package/dist/components/Modal/modal.utils.d.ts +2 -0
- package/dist/components/Modal/useModal.d.ts +5 -0
- package/dist/components/MultiSelect/multiSelect.animations.d.ts +12 -0
- package/dist/components/Popover/popover.animations.d.ts +1 -0
- package/dist/components/Primitives/PrimitiveInput/PrimitiveInput.d.ts +5 -0
- package/dist/components/Primitives/PrimitiveTextArea.d.ts +5 -0
- package/dist/components/Radio/radio.animations.d.ts +1 -0
- package/dist/components/Sidebar/SidebarMobile/MobileNavigationItem.d.ts +11 -0
- package/dist/components/Sidebar/SidebarMobile/MoreButton.d.ts +7 -0
- package/dist/components/Sidebar/SidebarMobile/PrimaryActionButton.d.ts +8 -0
- package/dist/components/Sidebar/SidebarMobile/hooks.d.ts +24 -0
- package/dist/components/Sidebar/SidebarMobile/index.d.ts +3 -0
- package/dist/components/Sidebar/SidebarMobile/mobile.tokens.d.ts +81 -0
- package/dist/components/Sidebar/SidebarMobile/utils.d.ts +29 -0
- package/dist/components/Sidebar/TenantPanel.d.ts +1 -0
- package/dist/components/Sidebar/types.d.ts +36 -1
- package/dist/components/Sidebar/utils.d.ts +39 -1
- package/dist/components/SingleSelect/singleSelect.animations.d.ts +3 -0
- package/dist/components/SplitTag/types.d.ts +1 -10
- package/dist/components/StatCard/statcard.tokens.d.ts +1 -1
- package/dist/components/StatCard/types.d.ts +5 -0
- package/dist/components/Switch/switch.animations.d.ts +2 -0
- package/dist/components/Tags/Tags.d.ts +12 -0
- package/dist/components/Tags/tag.tokens.d.ts +2 -1
- package/dist/components/Tooltip/tooltip.animations.d.ts +1 -0
- package/dist/components/Topbar/topbar.tokens.d.ts +0 -1
- package/dist/components/Topbar/types.d.ts +7 -1
- package/dist/components/animations/ChevronAnimation/ChevronAnimation.d.ts +3 -0
- package/dist/components/animations/ChevronAnimation/index.d.ts +3 -0
- package/dist/components/animations/ChevronAnimation/types.d.ts +28 -0
- package/dist/components/animations/ChevronAnimation/utils.d.ts +3 -0
- package/dist/components/animations/Ripple/RippleContainer.d.ts +7 -0
- package/dist/components/animations/Ripple/index.d.ts +2 -0
- package/dist/components/common/error.animations.d.ts +4 -0
- package/dist/components/common/index.d.ts +2 -0
- package/dist/components/common/useErrorShake.d.ts +6 -0
- package/dist/context/ThemeContext.d.ts +6 -0
- package/dist/context/ThemeProvider.d.ts +6 -1
- package/dist/context/index.d.ts +1 -1
- package/dist/context/initComponentTokens.d.ts +2 -1
- package/dist/context/useComponentToken.d.ts +3 -1
- package/dist/hooks/useRipple.d.ts +11 -0
- package/dist/main.d.ts +1 -0
- package/dist/main.js +33676 -27408
- package/dist/tokens/unit.tokens.d.ts +2 -0
- package/package.json +5 -2
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { AvatarSize, AvatarShape } from './types';
|
|
1
|
+
import { AvatarSize, AvatarShape, AvatarOnlinePosition } from './types';
|
|
2
2
|
declare const Avatar: import('react').ForwardRefExoticComponent<{
|
|
3
3
|
src?: string;
|
|
4
4
|
alt?: string;
|
|
@@ -6,6 +6,7 @@ declare const Avatar: import('react').ForwardRefExoticComponent<{
|
|
|
6
6
|
size?: AvatarSize;
|
|
7
7
|
shape?: AvatarShape;
|
|
8
8
|
online?: boolean;
|
|
9
|
+
onlinePosition?: AvatarOnlinePosition;
|
|
9
10
|
leadingSlot?: React.ReactNode;
|
|
10
11
|
trailingSlot?: React.ReactNode;
|
|
11
12
|
} & Omit<import('react').HTMLAttributes<HTMLDivElement>, "children"> & import('react').RefAttributes<HTMLDivElement>>;
|
|
@@ -10,6 +10,10 @@ export declare enum AvatarShape {
|
|
|
10
10
|
CIRCULAR = "circular",
|
|
11
11
|
ROUNDED = "rounded"
|
|
12
12
|
}
|
|
13
|
+
export declare enum AvatarOnlinePosition {
|
|
14
|
+
TOP = "top",
|
|
15
|
+
BOTTOM = "bottom"
|
|
16
|
+
}
|
|
13
17
|
export type AvatarProps = {
|
|
14
18
|
src?: string;
|
|
15
19
|
alt?: string;
|
|
@@ -17,6 +21,7 @@ export type AvatarProps = {
|
|
|
17
21
|
size?: AvatarSize;
|
|
18
22
|
shape?: AvatarShape;
|
|
19
23
|
online?: boolean;
|
|
24
|
+
onlinePosition?: AvatarOnlinePosition;
|
|
20
25
|
leadingSlot?: React.ReactNode;
|
|
21
26
|
trailingSlot?: React.ReactNode;
|
|
22
27
|
} & Omit<HTMLAttributes<HTMLDivElement>, 'children'>;
|
|
@@ -3,4 +3,10 @@ export type BreadcrumbItemType = {
|
|
|
3
3
|
rightSlot?: React.ReactNode;
|
|
4
4
|
label: string;
|
|
5
5
|
href: string;
|
|
6
|
+
/**
|
|
7
|
+
* Optional click handler for custom routing (e.g., React Router).
|
|
8
|
+
* When provided, prevents default link behavior and calls this handler instead.
|
|
9
|
+
* Use this to avoid page reloads and handle navigation with client-side routing.
|
|
10
|
+
*/
|
|
11
|
+
onClick?: (event: React.MouseEvent<HTMLAnchorElement>) => void;
|
|
6
12
|
};
|
|
@@ -7,7 +7,7 @@ declare const Button: import('react').ForwardRefExoticComponent<{
|
|
|
7
7
|
leadingIcon?: React.ReactNode;
|
|
8
8
|
trailingIcon?: React.ReactNode;
|
|
9
9
|
disabled?: boolean;
|
|
10
|
-
onClick?: () => void;
|
|
10
|
+
onClick?: (event?: React.MouseEvent<HTMLButtonElement>) => void;
|
|
11
11
|
loading?: boolean;
|
|
12
12
|
showSkeleton?: boolean;
|
|
13
13
|
skeletonVariant?: import('../Skeleton').SkeletonVariant;
|
|
@@ -37,7 +37,10 @@ export type ButtonTokensType = {
|
|
|
37
37
|
padding: {
|
|
38
38
|
[key in ButtonSize]: {
|
|
39
39
|
[key in ButtonType]: {
|
|
40
|
-
[key in ButtonSubType]:
|
|
40
|
+
[key in ButtonSubType]: {
|
|
41
|
+
x: CSSObject['padding'];
|
|
42
|
+
y: CSSObject['padding'];
|
|
43
|
+
};
|
|
41
44
|
};
|
|
42
45
|
};
|
|
43
46
|
};
|
|
@@ -31,7 +31,7 @@ export type ButtonProps = {
|
|
|
31
31
|
leadingIcon?: React.ReactNode;
|
|
32
32
|
trailingIcon?: React.ReactNode;
|
|
33
33
|
disabled?: boolean;
|
|
34
|
-
onClick?: () => void;
|
|
34
|
+
onClick?: (event?: React.MouseEvent<HTMLButtonElement>) => void;
|
|
35
35
|
loading?: boolean;
|
|
36
36
|
showSkeleton?: boolean;
|
|
37
37
|
skeletonVariant?: SkeletonVariant;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
interface DraggableColumnHeaderProps {
|
|
2
|
+
id: string;
|
|
3
|
+
children: React.ReactNode;
|
|
4
|
+
style?: React.CSSProperties;
|
|
5
|
+
disabled?: boolean;
|
|
6
|
+
'data-table-column-heading'?: string;
|
|
7
|
+
}
|
|
8
|
+
export declare const DraggableColumnHeader: React.FC<DraggableColumnHeaderProps>;
|
|
9
|
+
export {};
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { default as React } from 'react';
|
|
1
2
|
import { TableHeaderProps } from './types';
|
|
2
|
-
declare const TableHeader:
|
|
3
|
+
declare const TableHeader: React.ForwardRefExoticComponent<TableHeaderProps<Record<string, unknown>> & React.RefAttributes<HTMLTableSectionElement>>;
|
|
3
4
|
export default TableHeader;
|
|
@@ -8,6 +8,7 @@ export type TableHeaderProps<T extends Record<string, unknown>> = {
|
|
|
8
8
|
sortConfig?: SortConfig | null;
|
|
9
9
|
enableInlineEdit?: boolean;
|
|
10
10
|
enableColumnManager?: boolean;
|
|
11
|
+
enableColumnReordering?: boolean;
|
|
11
12
|
columnManagerMaxSelections?: number;
|
|
12
13
|
columnManagerAlwaysSelected?: string[];
|
|
13
14
|
columnManagerPrimaryAction?: {
|
|
@@ -36,6 +37,7 @@ export type TableHeaderProps<T extends Record<string, unknown>> = {
|
|
|
36
37
|
onSortDescending?: (field: keyof T) => void;
|
|
37
38
|
onSelectAll: (checked: boolean | 'indeterminate') => void;
|
|
38
39
|
onColumnChange: (columns: ColumnDefinition<T>[]) => void;
|
|
40
|
+
onColumnReorder?: (columns: ColumnDefinition<T>[]) => void;
|
|
39
41
|
onColumnFilter?: (field: string, type: FilterType, value: string | string[] | {
|
|
40
42
|
min: number;
|
|
41
43
|
max: number;
|
|
@@ -188,11 +188,12 @@ export type PaginationConfig = {
|
|
|
188
188
|
totalRows: number;
|
|
189
189
|
pageSizeOptions?: number[];
|
|
190
190
|
};
|
|
191
|
-
export type
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
191
|
+
export type BulkActionsConfig = {
|
|
192
|
+
showSelectAll?: boolean;
|
|
193
|
+
showDeselectAll?: boolean;
|
|
194
|
+
onSelectAll?: () => void;
|
|
195
|
+
onDeselectAll?: () => void;
|
|
196
|
+
customActions?: ReactNode;
|
|
196
197
|
};
|
|
197
198
|
export type RowActionConfig<T extends Record<string, unknown>> = {
|
|
198
199
|
id: string;
|
|
@@ -234,6 +235,8 @@ export type DataTableProps<T extends Record<string, unknown>> = {
|
|
|
234
235
|
onAdvancedFiltersChange?: (filters: unknown[]) => void;
|
|
235
236
|
columnFreeze?: number;
|
|
236
237
|
enableColumnManager?: boolean;
|
|
238
|
+
enableColumnReordering?: boolean;
|
|
239
|
+
onColumnReorder?: (columns: ColumnDefinition<T>[]) => void;
|
|
237
240
|
columnManagerMaxSelections?: number;
|
|
238
241
|
columnManagerAlwaysSelected?: (keyof T)[];
|
|
239
242
|
columnManagerPrimaryAction?: {
|
|
@@ -274,8 +277,24 @@ export type DataTableProps<T extends Record<string, unknown>> = {
|
|
|
274
277
|
isRowExpandable?: (row: T, index: number) => boolean;
|
|
275
278
|
onRowExpansionChange?: (rowId: unknown, isExpanded: boolean, rowData: T) => void;
|
|
276
279
|
enableRowSelection?: boolean;
|
|
277
|
-
|
|
280
|
+
onRowSelectionChange?: (selectedRowIds: string[], isSelected: boolean, rowId: string, rowData: T) => void;
|
|
281
|
+
bulkActions?: BulkActionsConfig;
|
|
278
282
|
rowActions?: RowActionsConfig<T>;
|
|
279
283
|
getRowStyle?: (row: T, index: number) => React.CSSProperties;
|
|
284
|
+
tableBodyHeight?: string | number;
|
|
285
|
+
/**
|
|
286
|
+
* Approximate height of a single row in pixels.
|
|
287
|
+
* Used to calculate minimum table height based on page size.
|
|
288
|
+
* Helps maintain consistent layout and prevent shifting.
|
|
289
|
+
* @default 52
|
|
290
|
+
*/
|
|
291
|
+
rowHeight?: number;
|
|
292
|
+
/**
|
|
293
|
+
* Whether to maintain minimum height based on page size.
|
|
294
|
+
* When true, table maintains consistent height preventing layout shifts.
|
|
295
|
+
* When false, table height adjusts to content.
|
|
296
|
+
* @default true
|
|
297
|
+
*/
|
|
298
|
+
maintainMinHeight?: boolean;
|
|
280
299
|
mobileColumnsToShow?: number;
|
|
281
300
|
};
|
|
@@ -1,12 +1,10 @@
|
|
|
1
1
|
import { default as React } from 'react';
|
|
2
|
-
import { CalendarTokenType } from './dateRangePicker.tokens';
|
|
3
2
|
type TimeSelectorProps = {
|
|
4
3
|
value: string;
|
|
5
4
|
onChange: (time: string) => void;
|
|
6
5
|
className?: string;
|
|
7
6
|
autoFocus?: boolean;
|
|
8
7
|
tabIndex?: number;
|
|
9
|
-
calendarToken?: CalendarTokenType;
|
|
10
8
|
};
|
|
11
9
|
declare const TimeSelector: React.ForwardRefExoticComponent<TimeSelectorProps & React.RefAttributes<HTMLDivElement>>;
|
|
12
10
|
export default TimeSelector;
|
|
@@ -83,7 +83,7 @@ export type CalendarTokenType = {
|
|
|
83
83
|
border: CSSObject['border'];
|
|
84
84
|
borderRadius: CSSObject['borderRadius'];
|
|
85
85
|
boxShadow: CSSObject['boxShadow'];
|
|
86
|
-
|
|
86
|
+
header: {
|
|
87
87
|
padding: {
|
|
88
88
|
x: CSSObject['padding'];
|
|
89
89
|
y: CSSObject['padding'];
|
|
@@ -92,12 +92,9 @@ export type CalendarTokenType = {
|
|
|
92
92
|
gap: CSSObject['gap'];
|
|
93
93
|
label: {
|
|
94
94
|
color: CSSObject['color'];
|
|
95
|
-
width: CSSObject['width'];
|
|
96
95
|
fontSize: CSSObject['fontSize'];
|
|
97
96
|
fontWeight: CSSObject['fontWeight'];
|
|
98
97
|
};
|
|
99
|
-
fontSize: CSSObject['fontSize'];
|
|
100
|
-
fontWeight: CSSObject['fontWeight'];
|
|
101
98
|
};
|
|
102
99
|
};
|
|
103
100
|
calendarGrid: {
|
|
@@ -136,8 +133,8 @@ export type CalendarTokenType = {
|
|
|
136
133
|
fontWeight: CSSObject['fontWeight'];
|
|
137
134
|
fontSize: CSSObject['fontSize'];
|
|
138
135
|
lineHeight: CSSObject['lineHeight'];
|
|
139
|
-
|
|
140
|
-
[key in CalendarState]: CSSObject['
|
|
136
|
+
border: {
|
|
137
|
+
[key in CalendarState]: CSSObject['border'];
|
|
141
138
|
};
|
|
142
139
|
borderRadius: CSSObject['borderRadius'];
|
|
143
140
|
};
|
|
@@ -166,14 +163,8 @@ export type CalendarTokenType = {
|
|
|
166
163
|
todayDay: {
|
|
167
164
|
fontWeight: CSSObject['fontWeight'];
|
|
168
165
|
};
|
|
169
|
-
hoverState: {
|
|
170
|
-
boxShadow: CSSObject['boxShadow'];
|
|
171
|
-
borderRadius: CSSObject['borderRadius'];
|
|
172
|
-
};
|
|
173
166
|
disabledDay: {
|
|
174
|
-
|
|
175
|
-
cursor: CSSObject['cursor'];
|
|
176
|
-
pointerEvents: CSSObject['pointerEvents'];
|
|
167
|
+
color: CSSObject['color'];
|
|
177
168
|
};
|
|
178
169
|
};
|
|
179
170
|
text: {
|
|
@@ -189,16 +180,13 @@ export type CalendarTokenType = {
|
|
|
189
180
|
todayDay: {
|
|
190
181
|
color: CSSObject['color'];
|
|
191
182
|
};
|
|
183
|
+
disabledDate: {
|
|
184
|
+
color: CSSObject['color'];
|
|
185
|
+
};
|
|
192
186
|
};
|
|
193
187
|
todayIndicator: {
|
|
194
188
|
width: CSSObject['width'];
|
|
195
|
-
height: CSSObject['height'];
|
|
196
189
|
backgroundColor: CSSObject['backgroundColor'];
|
|
197
|
-
borderRadius: CSSObject['borderRadius'];
|
|
198
|
-
position: CSSObject['position'];
|
|
199
|
-
bottom: CSSObject['bottom'];
|
|
200
|
-
left: CSSObject['left'];
|
|
201
|
-
transform: CSSObject['transform'];
|
|
202
190
|
};
|
|
203
191
|
};
|
|
204
192
|
};
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import { CSSObject } from 'styled-components';
|
|
2
|
+
import { FoundationTokenType } from '../../tokens/theme.token';
|
|
3
|
+
import { BreakpointType } from '../../breakpoints/breakPoints';
|
|
4
|
+
export type DirectoryState = 'default' | 'hover' | 'active';
|
|
5
|
+
/**
|
|
6
|
+
* Directory Tokens following the pattern: [target].CSSProp.[state]
|
|
7
|
+
*
|
|
8
|
+
* Hierarchical Structure:
|
|
9
|
+
* - Container level: gap, paddingX, paddingY (spacing for the entire directory)
|
|
10
|
+
* - Section level: Contains header, label, chevron, and item
|
|
11
|
+
* - header: Controls section header layout
|
|
12
|
+
* - label: Controls section label text styling
|
|
13
|
+
* - chevron: Controls section collapse/expand icon
|
|
14
|
+
* - item: Navigation items within the section (NavItem)
|
|
15
|
+
* - nested: Child items within navigation items
|
|
16
|
+
*
|
|
17
|
+
* Pattern examples:
|
|
18
|
+
* - gap (space between sections)
|
|
19
|
+
* - paddingX (container horizontal padding)
|
|
20
|
+
* - section.header.padding (section header spacing)
|
|
21
|
+
* - section.item.backgroundColor.[state] (nav item background with states)
|
|
22
|
+
* - section.item.nested.paddingLeft (nested item indentation)
|
|
23
|
+
*/
|
|
24
|
+
export type DirectoryTokenType = {
|
|
25
|
+
gap: CSSObject['gap'];
|
|
26
|
+
paddingX: CSSObject['padding'];
|
|
27
|
+
paddingY: CSSObject['padding'];
|
|
28
|
+
section: {
|
|
29
|
+
gap: CSSObject['gap'];
|
|
30
|
+
header: {
|
|
31
|
+
padding: {
|
|
32
|
+
x: CSSObject['padding'];
|
|
33
|
+
y: CSSObject['padding'];
|
|
34
|
+
};
|
|
35
|
+
label: {
|
|
36
|
+
fontSize: CSSObject['fontSize'];
|
|
37
|
+
color: CSSObject['color'];
|
|
38
|
+
fontWeight: CSSObject['fontWeight'];
|
|
39
|
+
};
|
|
40
|
+
chevron: {
|
|
41
|
+
width: CSSObject['width'];
|
|
42
|
+
color: CSSObject['color'];
|
|
43
|
+
};
|
|
44
|
+
};
|
|
45
|
+
itemList: {
|
|
46
|
+
gap: CSSObject['gap'];
|
|
47
|
+
item: {
|
|
48
|
+
padding: {
|
|
49
|
+
x: CSSObject['padding'];
|
|
50
|
+
y: CSSObject['padding'];
|
|
51
|
+
};
|
|
52
|
+
gap: CSSObject['gap'];
|
|
53
|
+
borderRadius: CSSObject['borderRadius'];
|
|
54
|
+
fontWeight: CSSObject['fontWeight'];
|
|
55
|
+
fontSize: CSSObject['fontSize'];
|
|
56
|
+
transition: CSSObject['transition'];
|
|
57
|
+
backgroundColor: {
|
|
58
|
+
[key in DirectoryState]: CSSObject['backgroundColor'];
|
|
59
|
+
};
|
|
60
|
+
color: {
|
|
61
|
+
[key in DirectoryState]: CSSObject['color'];
|
|
62
|
+
};
|
|
63
|
+
icon: {
|
|
64
|
+
width: CSSObject['width'];
|
|
65
|
+
};
|
|
66
|
+
chevron: {
|
|
67
|
+
width: CSSObject['width'];
|
|
68
|
+
color: CSSObject['color'];
|
|
69
|
+
};
|
|
70
|
+
};
|
|
71
|
+
nested: {
|
|
72
|
+
paddingLeft: CSSObject['paddingLeft'];
|
|
73
|
+
marginTop: CSSObject['marginTop'];
|
|
74
|
+
border: {
|
|
75
|
+
width: CSSObject['width'];
|
|
76
|
+
color: CSSObject['color'];
|
|
77
|
+
leftOffset: CSSObject['left'];
|
|
78
|
+
};
|
|
79
|
+
};
|
|
80
|
+
};
|
|
81
|
+
};
|
|
82
|
+
};
|
|
83
|
+
export type ResponsiveDirectoryTokens = {
|
|
84
|
+
[key in keyof BreakpointType]: DirectoryTokenType;
|
|
85
|
+
};
|
|
86
|
+
export declare const getDirectoryTokens: (foundationToken: FoundationTokenType) => ResponsiveDirectoryTokens;
|
|
@@ -17,6 +17,11 @@ export type NavbarItem = {
|
|
|
17
17
|
onClick?: () => void;
|
|
18
18
|
href?: string;
|
|
19
19
|
isSelected?: boolean;
|
|
20
|
+
/**
|
|
21
|
+
* When true, the item appears in the Sidebar mobile navigation drawer.
|
|
22
|
+
* Desktop always renders all items regardless of this flag.
|
|
23
|
+
*/
|
|
24
|
+
showOnMobile?: boolean;
|
|
20
25
|
};
|
|
21
26
|
export type SectionProps = {
|
|
22
27
|
section: DirectoryData;
|
|
@@ -105,6 +105,14 @@ export type DrawerContentProps = {
|
|
|
105
105
|
* Custom styles
|
|
106
106
|
*/
|
|
107
107
|
style?: React.CSSProperties;
|
|
108
|
+
/**
|
|
109
|
+
* Accessibility label for the drawer content
|
|
110
|
+
*/
|
|
111
|
+
'aria-label'?: string;
|
|
112
|
+
/**
|
|
113
|
+
* ID of the element describing the drawer content
|
|
114
|
+
*/
|
|
115
|
+
'aria-describedby'?: string;
|
|
108
116
|
};
|
|
109
117
|
export type DrawerHeaderProps = {
|
|
110
118
|
/**
|
|
@@ -125,6 +133,10 @@ export type DrawerTitleProps = {
|
|
|
125
133
|
* Custom class name
|
|
126
134
|
*/
|
|
127
135
|
className?: string;
|
|
136
|
+
/**
|
|
137
|
+
* ID for ARIA labeling
|
|
138
|
+
*/
|
|
139
|
+
id?: string;
|
|
128
140
|
};
|
|
129
141
|
export type DrawerDescriptionProps = {
|
|
130
142
|
/**
|
|
@@ -135,6 +147,10 @@ export type DrawerDescriptionProps = {
|
|
|
135
147
|
* Custom class name
|
|
136
148
|
*/
|
|
137
149
|
className?: string;
|
|
150
|
+
/**
|
|
151
|
+
* ID for ARIA description
|
|
152
|
+
*/
|
|
153
|
+
id?: string;
|
|
138
154
|
};
|
|
139
155
|
export type DrawerFooterProps = {
|
|
140
156
|
/**
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import { MultiValueInputProps } from './types';
|
|
2
|
-
declare const MultiValueInput: ({ value, label, sublabel, disabled, required, error, errorMessage, hintText, tags, onTagAdd, onTagRemove, onChange, size, ...rest }: MultiValueInputProps) => import("react/jsx-runtime").JSX.Element;
|
|
2
|
+
declare const MultiValueInput: ({ value, label, sublabel, disabled, required, error, errorMessage, hintText, tags, onTagAdd, onTagRemove, onChange, size, onFocus, onBlur, ...rest }: MultiValueInputProps) => import("react/jsx-runtime").JSX.Element;
|
|
3
3
|
export default MultiValueInput;
|
|
@@ -25,4 +25,6 @@ export type MultiValueInputProps = {
|
|
|
25
25
|
onTagRemove?: (tag: string) => void;
|
|
26
26
|
onChange?: (value: string) => void;
|
|
27
27
|
size?: TextInputSize;
|
|
28
|
-
|
|
28
|
+
onFocus?: (e: React.FocusEvent<HTMLInputElement>) => void;
|
|
29
|
+
onBlur?: (e: React.FocusEvent<HTMLInputElement>) => void;
|
|
30
|
+
} & Omit<React.InputHTMLAttributes<HTMLInputElement>, 'size' | 'style' | 'className' | 'onChange' | 'value' | 'onFocus' | 'onBlur'>;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Menu dropdown content animations
|
|
3
|
+
*/
|
|
4
|
+
export declare const menuContentAnimations = "\n transform-origin: var(--radix-dropdown-menu-content-transform-origin);\n\n &[data-side='bottom'][data-state='open'] {\n animation: slideInFromTop 400ms cubic-bezier(0.16, 1, 0.3, 1);\n }\n &[data-side='bottom'][data-state='closed'] {\n animation: slideOutToTop 300ms cubic-bezier(0.16, 1, 0.3, 1);\n }\n\n &[data-side='top'][data-state='open'] {\n animation: slideInFromBottom 400ms cubic-bezier(0.16, 1, 0.3, 1);\n }\n &[data-side='top'][data-state='closed'] {\n animation: slideOutToBottom 300ms cubic-bezier(0.16, 1, 0.3, 1);\n }\n\n &[data-side='right'][data-state='open'] {\n animation: slideInFromLeft 400ms cubic-bezier(0.16, 1, 0.3, 1);\n }\n &[data-side='right'][data-state='closed'] {\n animation: slideOutToLeft 300ms cubic-bezier(0.16, 1, 0.3, 1);\n }\n\n &[data-side='left'][data-state='open'] {\n animation: slideInFromRight 400ms cubic-bezier(0.16, 1, 0.3, 1);\n }\n &[data-side='left'][data-state='closed'] {\n animation: slideOutToRight 300ms cubic-bezier(0.16, 1, 0.3, 1);\n }\n\n /* Shadcn-style keyframes with zoom + slide + fade */\n @keyframes slideInFromTop {\n from {\n opacity: 0;\n transform: translateY(-8px) scale(0.95);\n }\n to {\n opacity: 1;\n transform: translateY(0) scale(1);\n }\n }\n\n @keyframes slideOutToTop {\n from {\n opacity: 1;\n transform: translateY(0) scale(1);\n }\n to {\n opacity: 0;\n transform: translateY(-8px) scale(0.95);\n }\n }\n\n @keyframes slideInFromBottom {\n from {\n opacity: 0;\n transform: translateY(8px) scale(0.95);\n }\n to {\n opacity: 1;\n transform: translateY(0) scale(1);\n }\n }\n\n @keyframes slideOutToBottom {\n from {\n opacity: 1;\n transform: translateY(0) scale(1);\n }\n to {\n opacity: 0;\n transform: translateY(8px) scale(0.95);\n }\n }\n\n @keyframes slideInFromLeft {\n from {\n opacity: 0;\n transform: translateX(-8px) scale(0.95);\n }\n to {\n opacity: 1;\n transform: translateX(0) scale(1);\n }\n }\n\n @keyframes slideOutToLeft {\n from {\n opacity: 1;\n transform: translateX(0) scale(1);\n }\n to {\n opacity: 0;\n transform: translateX(-8px) scale(0.95);\n }\n }\n\n @keyframes slideInFromRight {\n from {\n opacity: 0;\n transform: translateX(8px) scale(0.95);\n }\n to {\n opacity: 1;\n transform: translateX(0) scale(1);\n }\n }\n\n @keyframes slideOutToRight {\n from {\n opacity: 1;\n transform: translateX(0) scale(1);\n }\n to {\n opacity: 0;\n transform: translateX(8px) scale(0.95);\n }\n }\n";
|
|
5
|
+
/**
|
|
6
|
+
* Submenu animations
|
|
7
|
+
*/
|
|
8
|
+
export declare const submenuContentAnimations = "\n transform-origin: var(--radix-dropdown-menu-content-transform-origin);\n\n &[data-side='right'][data-state='open'] {\n animation: slideInFromLeft 400ms cubic-bezier(0.16, 1, 0.3, 1);\n }\n &[data-side='right'][data-state='closed'] {\n animation: slideOutToLeft 300ms cubic-bezier(0.16, 1, 0.3, 1);\n }\n\n &[data-side='left'][data-state='open'] {\n animation: slideInFromRight 400ms cubic-bezier(0.16, 1, 0.3, 1);\n }\n &[data-side='left'][data-state='closed'] {\n animation: slideOutToRight 300ms cubic-bezier(0.16, 1, 0.3, 1);\n }\n";
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export declare const modalBackdropAnimations: (isAnimatingIn: boolean) => import('styled-components').RuleSet<object>;
|
|
2
|
+
export declare const modalContentAnimations: (isAnimatingIn: boolean) => import('styled-components').RuleSet<object>;
|
|
3
|
+
export declare const ANIMATION_DURATION = 500;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MultiSelect Dropdown Animations
|
|
3
|
+
*
|
|
4
|
+
* Shadcn-style animations with zoom + slide + fade
|
|
5
|
+
* - Combined animation in single keyframe
|
|
6
|
+
* - Side-aware based on dropdown position
|
|
7
|
+
* - Smooth spring easing
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* Main dropdown content animations
|
|
11
|
+
*/
|
|
12
|
+
export declare const dropdownContentAnimations = "\n transform-origin: var(--radix-dropdown-menu-content-transform-origin);\n\n /* Opening animations - Shadcn style with zoom */\n &[data-side='bottom'][data-state='open'] {\n animation: slideInFromTop 400ms cubic-bezier(0.16, 1, 0.3, 1);\n }\n &[data-side='bottom'][data-state='closed'] {\n animation: slideOutToTop 300ms cubic-bezier(0.16, 1, 0.3, 1);\n }\n\n &[data-side='top'][data-state='open'] {\n animation: slideInFromBottom 400ms cubic-bezier(0.16, 1, 0.3, 1);\n }\n &[data-side='top'][data-state='closed'] {\n animation: slideOutToBottom 300ms cubic-bezier(0.16, 1, 0.3, 1);\n }\n\n &[data-side='right'][data-state='open'] {\n animation: slideInFromLeft 400ms cubic-bezier(0.16, 1, 0.3, 1);\n }\n &[data-side='right'][data-state='closed'] {\n animation: slideOutToLeft 300ms cubic-bezier(0.16, 1, 0.3, 1);\n }\n\n &[data-side='left'][data-state='open'] {\n animation: slideInFromRight 400ms cubic-bezier(0.16, 1, 0.3, 1);\n }\n &[data-side='left'][data-state='closed'] {\n animation: slideOutToRight 300ms cubic-bezier(0.16, 1, 0.3, 1);\n }\n\n /* Shadcn-style keyframes with zoom + slide + fade */\n @keyframes slideInFromTop {\n from {\n opacity: 0;\n transform: translateY(-8px) scale(0.95);\n }\n to {\n opacity: 1;\n transform: translateY(0) scale(1);\n }\n }\n\n @keyframes slideOutToTop {\n from {\n opacity: 1;\n transform: translateY(0) scale(1);\n }\n to {\n opacity: 0;\n transform: translateY(-8px) scale(0.95);\n }\n }\n\n @keyframes slideInFromBottom {\n from {\n opacity: 0;\n transform: translateY(8px) scale(0.95);\n }\n to {\n opacity: 1;\n transform: translateY(0) scale(1);\n }\n }\n\n @keyframes slideOutToBottom {\n from {\n opacity: 1;\n transform: translateY(0) scale(1);\n }\n to {\n opacity: 0;\n transform: translateY(8px) scale(0.95);\n }\n }\n\n @keyframes slideInFromLeft {\n from {\n opacity: 0;\n transform: translateX(-8px) scale(0.95);\n }\n to {\n opacity: 1;\n transform: translateX(0) scale(1);\n }\n }\n\n @keyframes slideOutToLeft {\n from {\n opacity: 1;\n transform: translateX(0) scale(1);\n }\n to {\n opacity: 0;\n transform: translateX(-8px) scale(0.95);\n }\n }\n\n @keyframes slideInFromRight {\n from {\n opacity: 0;\n transform: translateX(8px) scale(0.95);\n }\n to {\n opacity: 1;\n transform: translateX(0) scale(1);\n }\n }\n\n @keyframes slideOutToRight {\n from {\n opacity: 1;\n transform: translateX(0) scale(1);\n }\n to {\n opacity: 0;\n transform: translateX(8px) scale(0.95);\n }\n }\n";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const popoverContentAnimations: import('styled-components').RuleSet<object>;
|
|
@@ -84,6 +84,11 @@ type PrimitiveInputProps = StateStyles & {
|
|
|
84
84
|
overflowY?: CSSObject['overflowY'];
|
|
85
85
|
contentCentered?: boolean;
|
|
86
86
|
cursor?: CSSObject['cursor'];
|
|
87
|
+
transition?: CSSObject['transition'];
|
|
88
|
+
transitionProperty?: CSSObject['transitionProperty'];
|
|
89
|
+
transitionDuration?: CSSObject['transitionDuration'];
|
|
90
|
+
transitionTimingFunction?: CSSObject['transitionTimingFunction'];
|
|
91
|
+
transitionDelay?: CSSObject['transitionDelay'];
|
|
87
92
|
placeholderStyles?: CSSObject;
|
|
88
93
|
};
|
|
89
94
|
export type InputProps = React.InputHTMLAttributes<HTMLInputElement> & PrimitiveInputProps & {
|
|
@@ -79,6 +79,11 @@ type PrimitiveTextareaProps = StateStyles & {
|
|
|
79
79
|
overflowY?: CSSObject['overflowY'];
|
|
80
80
|
contentCentered?: boolean;
|
|
81
81
|
cursor?: CSSObject['cursor'];
|
|
82
|
+
transition?: CSSObject['transition'];
|
|
83
|
+
transitionProperty?: CSSObject['transitionProperty'];
|
|
84
|
+
transitionDuration?: CSSObject['transitionDuration'];
|
|
85
|
+
transitionTimingFunction?: CSSObject['transitionTimingFunction'];
|
|
86
|
+
transitionDelay?: CSSObject['transitionDelay'];
|
|
82
87
|
placeholderStyles?: CSSObject;
|
|
83
88
|
resize?: CSSObject['resize'];
|
|
84
89
|
fontFamily?: CSSObject['fontFamily'];
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const radioAnimations: import('styled-components').RuleSet<object>;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { default as React } from 'react';
|
|
2
|
+
import { MobileNavigationItem as MobileNavigationItemType } from '../types';
|
|
3
|
+
import { MobileNavigationTokenType } from './mobile.tokens';
|
|
4
|
+
type MobileNavigationItemProps = {
|
|
5
|
+
item: MobileNavigationItemType;
|
|
6
|
+
index?: number;
|
|
7
|
+
tokens: MobileNavigationTokenType;
|
|
8
|
+
onSelect: (item: MobileNavigationItemType) => void;
|
|
9
|
+
};
|
|
10
|
+
declare const MobileNavigationItem: React.ForwardRefExoticComponent<MobileNavigationItemProps & React.RefAttributes<HTMLButtonElement>>;
|
|
11
|
+
export default MobileNavigationItem;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { MobileNavigationTokenType } from './mobile.tokens';
|
|
2
|
+
type MoreButtonProps = {
|
|
3
|
+
tokens: MobileNavigationTokenType;
|
|
4
|
+
onClick: () => void;
|
|
5
|
+
};
|
|
6
|
+
declare const MoreButton: import('react').ForwardRefExoticComponent<MoreButtonProps & import('react').RefAttributes<HTMLButtonElement>>;
|
|
7
|
+
export default MoreButton;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { default as React } from 'react';
|
|
2
|
+
import { MobileNavigationTokenType } from './mobile.tokens';
|
|
3
|
+
type PrimaryActionButtonProps = {
|
|
4
|
+
tokens: MobileNavigationTokenType;
|
|
5
|
+
buttonProps?: Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, 'type'>;
|
|
6
|
+
};
|
|
7
|
+
declare const PrimaryActionButton: React.ForwardRefExoticComponent<PrimaryActionButtonProps & React.RefAttributes<HTMLButtonElement>>;
|
|
8
|
+
export default PrimaryActionButton;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { MobileNavigationItem } from '../types';
|
|
2
|
+
/**
|
|
3
|
+
* Custom hook to manage ordered items with smart property updates.
|
|
4
|
+
* Only resets order when items are added/removed, otherwise preserves order
|
|
5
|
+
* and just updates properties (like isSelected).
|
|
6
|
+
*
|
|
7
|
+
* This hook is extracted because:
|
|
8
|
+
* 1. It encapsulates complex state logic
|
|
9
|
+
* 2. The logic is reusable across different navigation contexts
|
|
10
|
+
* 3. It keeps the component clean and focused on rendering
|
|
11
|
+
*/
|
|
12
|
+
export declare const useOrderedItems: <T extends {
|
|
13
|
+
label: string;
|
|
14
|
+
}>(items: T[]) => readonly [T[], import('react').Dispatch<import('react').SetStateAction<T[]>>];
|
|
15
|
+
/**
|
|
16
|
+
* Custom hook for item selection with smart swapping logic.
|
|
17
|
+
* Handles the complex behavior of swapping secondary items with primary items.
|
|
18
|
+
*
|
|
19
|
+
* This hook is extracted because:
|
|
20
|
+
* 1. It encapsulates business logic for item swapping
|
|
21
|
+
* 2. It reduces component complexity
|
|
22
|
+
* 3. The logic is testable in isolation
|
|
23
|
+
*/
|
|
24
|
+
export declare const useItemSelection: (orderedItems: MobileNavigationItem[], setOrderedItems: (items: MobileNavigationItem[]) => void, primaryItems: MobileNavigationItem[], hasSecondaryItems: boolean, onCollapse: () => void) => (item: MobileNavigationItem, isSecondaryItem?: boolean) => void;
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import { CSSObject } from 'styled-components';
|
|
2
|
+
import { FoundationTokenType } from '../../../tokens/theme.token';
|
|
3
|
+
import { BreakpointType } from '../../../breakpoints/breakPoints';
|
|
4
|
+
export type MobileNavigationState = 'default' | 'active';
|
|
5
|
+
/**
|
|
6
|
+
* Mobile Navigation Tokens following the pattern: [target].CSSProp.[variant].[state]
|
|
7
|
+
*
|
|
8
|
+
* Structure matches Sidebar pattern for consistency:
|
|
9
|
+
* - Base properties: backgroundColor, drawer.*
|
|
10
|
+
* - Layout surfaces: padding/gap (container), row.*
|
|
11
|
+
* - Interactive elements: item.*, primaryAction.*
|
|
12
|
+
* - Interactive elements have state-based styling: [state] = default | active
|
|
13
|
+
*
|
|
14
|
+
* Note: This is mobile-only, so no responsive breakpoints needed.
|
|
15
|
+
* All navigation items (including the More button) use the same item tokens.
|
|
16
|
+
*
|
|
17
|
+
* Pattern examples:
|
|
18
|
+
* - padding.[axis] (wrapper spacing for all rows)
|
|
19
|
+
* - row.padding.[axis] (individual row spacing)
|
|
20
|
+
* - item.backgroundColor.[state] (item background per state)
|
|
21
|
+
* - primaryAction.width (primary action button dimensions)
|
|
22
|
+
*/
|
|
23
|
+
export type MobileNavigationTokenType = {
|
|
24
|
+
backgroundColor: CSSObject['backgroundColor'];
|
|
25
|
+
drawer: {
|
|
26
|
+
borderRadius: CSSObject['borderRadius'];
|
|
27
|
+
borderTop: CSSObject['border'];
|
|
28
|
+
};
|
|
29
|
+
padding: {
|
|
30
|
+
x: CSSObject['padding'];
|
|
31
|
+
y: CSSObject['padding'];
|
|
32
|
+
};
|
|
33
|
+
gap: CSSObject['gap'];
|
|
34
|
+
row: {
|
|
35
|
+
padding: {
|
|
36
|
+
x: CSSObject['padding'];
|
|
37
|
+
y: CSSObject['padding'];
|
|
38
|
+
};
|
|
39
|
+
gap: CSSObject['gap'];
|
|
40
|
+
item: {
|
|
41
|
+
width: CSSObject['width'];
|
|
42
|
+
height: CSSObject['height'];
|
|
43
|
+
borderRadius: CSSObject['borderRadius'];
|
|
44
|
+
gap: CSSObject['gap'];
|
|
45
|
+
backgroundColor: {
|
|
46
|
+
[key in MobileNavigationState]: CSSObject['backgroundColor'];
|
|
47
|
+
};
|
|
48
|
+
color: {
|
|
49
|
+
[key in MobileNavigationState]: CSSObject['color'];
|
|
50
|
+
};
|
|
51
|
+
fontWeight: CSSObject['fontWeight'];
|
|
52
|
+
icon: {
|
|
53
|
+
width: CSSObject['width'];
|
|
54
|
+
height: CSSObject['height'];
|
|
55
|
+
borderRadius: CSSObject['borderRadius'];
|
|
56
|
+
transition: CSSObject['transition'];
|
|
57
|
+
};
|
|
58
|
+
text: {
|
|
59
|
+
fontSize: CSSObject['fontSize'];
|
|
60
|
+
fontWeight: CSSObject['fontWeight'];
|
|
61
|
+
textAlign: CSSObject['textAlign'];
|
|
62
|
+
};
|
|
63
|
+
};
|
|
64
|
+
primaryAction: {
|
|
65
|
+
width: CSSObject['width'];
|
|
66
|
+
height: CSSObject['height'];
|
|
67
|
+
borderRadius: CSSObject['borderRadius'];
|
|
68
|
+
background: CSSObject['background'];
|
|
69
|
+
boxShadow: CSSObject['boxShadow'];
|
|
70
|
+
color: CSSObject['color'];
|
|
71
|
+
icon: {
|
|
72
|
+
width: CSSObject['width'];
|
|
73
|
+
height: CSSObject['height'];
|
|
74
|
+
};
|
|
75
|
+
};
|
|
76
|
+
};
|
|
77
|
+
};
|
|
78
|
+
export type ResponsiveMobileNavigationTokens = {
|
|
79
|
+
[key in keyof BreakpointType]: MobileNavigationTokenType;
|
|
80
|
+
};
|
|
81
|
+
export declare const getMobileNavigationTokens: (foundationToken: FoundationTokenType) => ResponsiveMobileNavigationTokens;
|