@licklist/design 0.78.5-dev.57 → 0.78.5-dev.59
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/Maintenance/MaintenancePage.js +1 -0
- package/dist/index.js +3 -1
- package/dist/v2/components/ActionMenu/ActionMenu.d.ts.map +1 -1
- package/dist/v2/components/ActionMenu/ActionMenu.js +60 -8
- package/dist/v2/components/ActionMenu/ActionMenu.scss.js +1 -1
- package/dist/v2/components/Alert/Alert.d.ts.map +1 -1
- package/dist/v2/components/Alert/Alert.js +48 -1
- package/dist/v2/components/Alert/Alert.scss.js +1 -1
- package/dist/v2/components/Badge/Badge.d.ts.map +1 -1
- package/dist/v2/components/Badge/Badge.js +1 -1
- package/dist/v2/components/Badge/Badge.scss.js +1 -1
- package/dist/v2/components/Button/Button.d.ts +1 -1
- package/dist/v2/components/Button/Button.d.ts.map +1 -1
- package/dist/v2/components/Button/Button.js +1 -0
- package/dist/v2/components/Button/GhostButton.scss.js +1 -1
- package/dist/v2/components/Button/index.d.ts +2 -0
- package/dist/v2/components/Button/index.d.ts.map +1 -1
- package/dist/v2/components/FormField/FormField.d.ts.map +1 -1
- package/dist/v2/components/Modal/DeleteModal.d.ts.map +1 -1
- package/dist/v2/components/Modal/DeleteModal.js +4 -0
- package/dist/v2/components/NPSScore/NPSScore.d.ts +3 -1
- package/dist/v2/components/NPSScore/NPSScore.d.ts.map +1 -1
- package/dist/v2/components/NPSScore/NPSScore.js +4 -7
- package/dist/v2/components/NPSScore/NPSScore.scss.js +1 -1
- package/dist/v2/components/NewInput/NewInput.d.ts.map +1 -1
- package/dist/v2/components/NewInput/NewInput.js +8 -0
- package/dist/v2/components/NewPageHeader/NewPageHeader.d.ts +2 -1
- package/dist/v2/components/NewPageHeader/NewPageHeader.d.ts.map +1 -1
- package/dist/v2/components/NewPageHeader/NewPageHeader.js +3 -2
- package/dist/v2/components/NewPageHeader/NewPageHeader.scss.js +1 -1
- package/dist/v2/components/NewTable/NewTable.d.ts.map +1 -1
- package/dist/v2/components/NewTable/NewTable.js +1 -0
- package/dist/v2/components/NewTable/NewTable.scss.js +1 -1
- package/dist/v2/components/Pagination/Pagination.js +1 -4
- package/dist/v2/components/Pagination/Pagination.scss.js +1 -1
- package/dist/v2/components/QuickFilter/QuickFilter.d.ts.map +1 -1
- package/dist/v2/components/QuickFilter/QuickFilter.js +5 -2
- package/dist/v2/components/QuickFilter/QuickFilter.scss.js +1 -1
- package/dist/v2/components/SectionHeader/SectionHeader.d.ts.map +1 -1
- package/dist/v2/components/TableSortIcon/TableSortIcon.d.ts +9 -0
- package/dist/v2/components/TableSortIcon/TableSortIcon.d.ts.map +1 -0
- package/dist/v2/components/TableSortIcon/TableSortIcon.js +14 -0
- package/dist/v2/components/TableSortIcon/index.d.ts +2 -0
- package/dist/v2/components/TableSortIcon/index.d.ts.map +1 -0
- package/dist/v2/components/WYSIWYGEditor/Icons.js +2 -2
- package/dist/v2/components/index.d.ts +5 -3
- package/dist/v2/components/index.d.ts.map +1 -1
- package/dist/v2/icons/index.d.ts +10 -0
- package/dist/v2/icons/index.d.ts.map +1 -1
- package/dist/v2/icons/index.js +61 -1
- package/dist/v2/pages/Settings/components/SidebarCustomisation.js +2 -3
- package/dist/v2/pages/Settings/components/SidebarNavItem.js +2 -2
- package/package.json +1 -1
- package/src/v2/components/ActionMenu/ActionMenu.scss +22 -5
- package/src/v2/components/ActionMenu/ActionMenu.tsx +53 -5
- package/src/v2/components/Alert/Alert.scss +8 -19
- package/src/v2/components/Alert/Alert.tsx +24 -1
- package/src/v2/components/Badge/Badge.scss +13 -0
- package/src/v2/components/Badge/Badge.tsx +10 -8
- package/src/v2/components/Button/Button.tsx +13 -2
- package/src/v2/components/Button/GhostButton.scss +11 -1
- package/src/v2/components/Button/index.ts +2 -0
- package/src/v2/components/Customer/CustomersList.scss +72 -115
- package/src/v2/components/FormField/FormField.tsx +19 -21
- package/src/v2/components/Modal/DeleteModal.tsx +4 -2
- package/src/v2/components/NPSScore/NPSScore.scss +4 -0
- package/src/v2/components/NPSScore/NPSScore.tsx +6 -7
- package/src/v2/components/NewInput/NewInput.tsx +13 -1
- package/src/v2/components/NewPageHeader/NewPageHeader.scss +8 -5
- package/src/v2/components/NewPageHeader/NewPageHeader.tsx +21 -21
- package/src/v2/components/NewTable/NewTable.scss +17 -1
- package/src/v2/components/NewTable/NewTable.tsx +1 -0
- package/src/v2/components/Pagination/Pagination.scss +18 -18
- package/src/v2/components/Pagination/Pagination.tsx +1 -1
- package/src/v2/components/QuickFilter/QuickFilter.scss +17 -34
- package/src/v2/components/QuickFilter/QuickFilter.tsx +7 -5
- package/src/v2/components/SectionHeader/SectionHeader.tsx +5 -7
- package/src/v2/components/TableSortIcon/TableSortIcon.tsx +20 -0
- package/src/v2/components/TableSortIcon/index.ts +1 -0
- package/src/v2/components/WYSIWYGEditor/Icons.tsx +2 -2
- package/src/v2/components/index.ts +8 -3
- package/src/v2/icons/index.tsx +14 -0
- package/src/v2/pages/Settings/components/SidebarCustomisation.tsx +1 -1
|
@@ -8,8 +8,10 @@ export interface NPSScoreProps {
|
|
|
8
8
|
firstName?: string
|
|
9
9
|
/** Callback when NPS is submitted */
|
|
10
10
|
onSubmit?: (data: NPSSubmitData) => void
|
|
11
|
-
/** Callback when dismissed */
|
|
11
|
+
/** Callback when dismissed without submitting */
|
|
12
12
|
onDismiss?: () => void
|
|
13
|
+
/** Callback when success alert is dismissed after submission */
|
|
14
|
+
onSubmitDismiss?: () => void
|
|
13
15
|
}
|
|
14
16
|
|
|
15
17
|
export interface NPSSubmitData {
|
|
@@ -44,6 +46,7 @@ export const NPSScore: React.FC<NPSScoreProps> = ({
|
|
|
44
46
|
firstName,
|
|
45
47
|
onSubmit,
|
|
46
48
|
onDismiss,
|
|
49
|
+
onSubmitDismiss,
|
|
47
50
|
}) => {
|
|
48
51
|
const [selectedScore, setSelectedScore] = useState<number | null>(null)
|
|
49
52
|
const [reason, setReason] = useState('')
|
|
@@ -56,11 +59,7 @@ export const NPSScore: React.FC<NPSScoreProps> = ({
|
|
|
56
59
|
const handleSubmit = async () => {
|
|
57
60
|
if (!selectedScore) return
|
|
58
61
|
|
|
59
|
-
// Validate required fields - reason required for all scores
|
|
60
62
|
const newErrors: { reason?: string; role?: string } = {}
|
|
61
|
-
if (!reason.trim()) {
|
|
62
|
-
newErrors.reason = 'Please provide a reason for your score'
|
|
63
|
-
}
|
|
64
63
|
if (!role) {
|
|
65
64
|
newErrors.role = 'Please select your role'
|
|
66
65
|
}
|
|
@@ -92,7 +91,7 @@ export const NPSScore: React.FC<NPSScoreProps> = ({
|
|
|
92
91
|
variant="success"
|
|
93
92
|
title="Thank you!"
|
|
94
93
|
message="Your feedback has been submitted successfully."
|
|
95
|
-
onDismiss={
|
|
94
|
+
onDismiss={onSubmitDismiss}
|
|
96
95
|
/>
|
|
97
96
|
</div>
|
|
98
97
|
)
|
|
@@ -143,7 +142,7 @@ export const NPSScore: React.FC<NPSScoreProps> = ({
|
|
|
143
142
|
{/* Reason textarea - always visible */}
|
|
144
143
|
<div className="nps-score__field">
|
|
145
144
|
<label className="nps-score__field-label">
|
|
146
|
-
Reason for this score?
|
|
145
|
+
Reason for this score? (Optional)
|
|
147
146
|
</label>
|
|
148
147
|
<textarea
|
|
149
148
|
value={reason}
|
|
@@ -62,7 +62,19 @@ export const NewInput = forwardRef<HTMLInputElement | HTMLTextAreaElement, NewIn
|
|
|
62
62
|
ref={inputRef}
|
|
63
63
|
{...(props as React.InputHTMLAttributes<HTMLInputElement>)}
|
|
64
64
|
/>
|
|
65
|
-
<div
|
|
65
|
+
<div
|
|
66
|
+
className="icon"
|
|
67
|
+
role="button"
|
|
68
|
+
tabIndex={0}
|
|
69
|
+
onClick={handleIconClick}
|
|
70
|
+
onKeyDown={(e) => {
|
|
71
|
+
if (e.key === 'Enter' || e.key === ' ') {
|
|
72
|
+
e.preventDefault();
|
|
73
|
+
handleIconClick();
|
|
74
|
+
}
|
|
75
|
+
}}
|
|
76
|
+
style={{ cursor: (onIconClick || (props as any).type === 'date') ? 'pointer' : 'default' }}
|
|
77
|
+
>
|
|
66
78
|
{icon}
|
|
67
79
|
</div>
|
|
68
80
|
</div>
|
|
@@ -2,13 +2,17 @@
|
|
|
2
2
|
display: flex;
|
|
3
3
|
flex-direction: column;
|
|
4
4
|
align-items: flex-start;
|
|
5
|
-
gap:
|
|
5
|
+
gap: 0;
|
|
6
6
|
align-self: stretch;
|
|
7
|
-
padding: 32px 32px
|
|
7
|
+
padding: 32px 32px 0px 32px;
|
|
8
8
|
|
|
9
9
|
@media (max-width: 768px) {
|
|
10
|
-
padding: 16px 16px
|
|
11
|
-
gap:
|
|
10
|
+
padding: 16px 16px 0px 16px;
|
|
11
|
+
gap: 0;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
@media (max-width: 480px) {
|
|
15
|
+
padding: 16px 12px 0px 12px;
|
|
12
16
|
}
|
|
13
17
|
}
|
|
14
18
|
|
|
@@ -49,5 +53,4 @@
|
|
|
49
53
|
height: 1px;
|
|
50
54
|
border: none;
|
|
51
55
|
background-color: var(--border-primary, #e8e9ef);
|
|
52
|
-
margin: 0;
|
|
53
56
|
}
|
|
@@ -9,6 +9,7 @@ export interface NewPageHeaderProps {
|
|
|
9
9
|
renderRight?: () => React.ReactNode;
|
|
10
10
|
className?: string;
|
|
11
11
|
showDivider?: boolean;
|
|
12
|
+
dividerClassName?: string;
|
|
12
13
|
}
|
|
13
14
|
|
|
14
15
|
export const NewPageHeader = ({
|
|
@@ -17,26 +18,25 @@ export const NewPageHeader = ({
|
|
|
17
18
|
onCancel,
|
|
18
19
|
renderRight,
|
|
19
20
|
className = '',
|
|
20
|
-
showDivider = true
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
</div>
|
|
21
|
+
showDivider = true,
|
|
22
|
+
dividerClassName = ''
|
|
23
|
+
}: NewPageHeaderProps) => (
|
|
24
|
+
<div className={`new-page-header-container ${className}`}>
|
|
25
|
+
<div className="new-page-header">
|
|
26
|
+
<h1 className="new-page-header__title">{title}</h1>
|
|
27
|
+
<div className="new-page-header__actions">
|
|
28
|
+
{renderRight && renderRight()}
|
|
29
|
+
{onCancel && (
|
|
30
|
+
<Button
|
|
31
|
+
type="button"
|
|
32
|
+
variant="destructive-soft"
|
|
33
|
+
onClick={onCancel}
|
|
34
|
+
>
|
|
35
|
+
<ButtonText color="danger">{cancelLabel}</ButtonText>
|
|
36
|
+
</Button>
|
|
37
|
+
)}
|
|
38
38
|
</div>
|
|
39
|
-
{showDivider && <hr className="new-page-header__divider" />}
|
|
40
39
|
</div>
|
|
41
|
-
|
|
42
|
-
|
|
40
|
+
{showDivider && <hr className={`new-page-header__divider ${dividerClassName}`} />}
|
|
41
|
+
</div>
|
|
42
|
+
);
|
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
.new-table-wrapper {
|
|
2
2
|
width: 100%;
|
|
3
3
|
overflow-x: auto;
|
|
4
|
+
overflow-y: visible;
|
|
5
|
+
|
|
6
|
+
&.action-menu-open {
|
|
7
|
+
overflow: visible !important;
|
|
8
|
+
}
|
|
4
9
|
}
|
|
5
10
|
|
|
6
11
|
.new-table {
|
|
@@ -28,6 +33,17 @@
|
|
|
28
33
|
&__row {
|
|
29
34
|
border-bottom: 1px solid var(--border-primary, #E8E9EF);
|
|
30
35
|
transition: background-color 0.2s ease;
|
|
36
|
+
overflow: visible;
|
|
37
|
+
|
|
38
|
+
&.action-menu-open {
|
|
39
|
+
overflow: visible !important;
|
|
40
|
+
z-index: 20;
|
|
41
|
+
position: relative;
|
|
42
|
+
|
|
43
|
+
.new-table__cell {
|
|
44
|
+
overflow: visible !important;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
31
47
|
|
|
32
48
|
&:last-child {
|
|
33
49
|
border-bottom: none;
|
|
@@ -46,6 +62,7 @@
|
|
|
46
62
|
font-size: var(--text-base-size, 14px);
|
|
47
63
|
color: var(--label-primary, #121E52);
|
|
48
64
|
vertical-align: middle;
|
|
65
|
+
overflow: visible;
|
|
49
66
|
}
|
|
50
67
|
|
|
51
68
|
&__no-data-cell {
|
|
@@ -60,7 +77,6 @@
|
|
|
60
77
|
// Mobile styles
|
|
61
78
|
@media (max-width: 768px) {
|
|
62
79
|
.new-table-wrapper {
|
|
63
|
-
overflow-x: auto;
|
|
64
80
|
-webkit-overflow-scrolling: touch;
|
|
65
81
|
}
|
|
66
82
|
|
|
@@ -13,8 +13,8 @@
|
|
|
13
13
|
display: flex;
|
|
14
14
|
align-items: center;
|
|
15
15
|
justify-content: center;
|
|
16
|
-
width:
|
|
17
|
-
height:
|
|
16
|
+
width: 44px;
|
|
17
|
+
height: 44px;
|
|
18
18
|
border-radius: 50%;
|
|
19
19
|
border: none;
|
|
20
20
|
cursor: pointer;
|
|
@@ -43,8 +43,8 @@
|
|
|
43
43
|
}
|
|
44
44
|
|
|
45
45
|
svg {
|
|
46
|
-
width:
|
|
47
|
-
height:
|
|
46
|
+
width: 24px;
|
|
47
|
+
height: 24px;
|
|
48
48
|
flex-shrink: 0; // Prevent SVG from shrinking
|
|
49
49
|
}
|
|
50
50
|
}
|
|
@@ -56,13 +56,13 @@
|
|
|
56
56
|
}
|
|
57
57
|
|
|
58
58
|
&__page-number {
|
|
59
|
-
font-size:
|
|
59
|
+
font-size: 15px;
|
|
60
60
|
font-weight: 600;
|
|
61
61
|
color: #14215a; // Main fill primary
|
|
62
62
|
}
|
|
63
63
|
|
|
64
64
|
&__showing {
|
|
65
|
-
font-size:
|
|
65
|
+
font-size: 13px;
|
|
66
66
|
font-weight: 500;
|
|
67
67
|
color: #626a90; // Secondary text color
|
|
68
68
|
}
|
|
@@ -78,12 +78,12 @@
|
|
|
78
78
|
}
|
|
79
79
|
|
|
80
80
|
&__button {
|
|
81
|
-
width:
|
|
82
|
-
height:
|
|
81
|
+
width: 40px;
|
|
82
|
+
height: 40px;
|
|
83
83
|
|
|
84
84
|
svg {
|
|
85
|
-
width:
|
|
86
|
-
height:
|
|
85
|
+
width: 20px;
|
|
86
|
+
height: 20px;
|
|
87
87
|
}
|
|
88
88
|
}
|
|
89
89
|
|
|
@@ -92,11 +92,11 @@
|
|
|
92
92
|
}
|
|
93
93
|
|
|
94
94
|
&__page-number {
|
|
95
|
-
font-size:
|
|
95
|
+
font-size: 14px;
|
|
96
96
|
}
|
|
97
97
|
|
|
98
98
|
&__showing {
|
|
99
|
-
font-size:
|
|
99
|
+
font-size: 12px;
|
|
100
100
|
}
|
|
101
101
|
}
|
|
102
102
|
}
|
|
@@ -114,12 +114,12 @@
|
|
|
114
114
|
}
|
|
115
115
|
|
|
116
116
|
&__button {
|
|
117
|
-
width:
|
|
118
|
-
height:
|
|
117
|
+
width: 36px;
|
|
118
|
+
height: 36px;
|
|
119
119
|
|
|
120
120
|
svg {
|
|
121
|
-
width:
|
|
122
|
-
height:
|
|
121
|
+
width: 18px;
|
|
122
|
+
height: 18px;
|
|
123
123
|
}
|
|
124
124
|
}
|
|
125
125
|
|
|
@@ -131,11 +131,11 @@
|
|
|
131
131
|
}
|
|
132
132
|
|
|
133
133
|
&__page-number {
|
|
134
|
-
font-size:
|
|
134
|
+
font-size: 13px;
|
|
135
135
|
}
|
|
136
136
|
|
|
137
137
|
&__showing {
|
|
138
|
-
font-size:
|
|
138
|
+
font-size: 11px;
|
|
139
139
|
}
|
|
140
140
|
}
|
|
141
141
|
}
|
|
@@ -59,7 +59,7 @@ export const Pagination: React.FC<PaginationProps> = ({
|
|
|
59
59
|
disabled={isLastPage}
|
|
60
60
|
aria-label={t('App:next', { defaultValue: 'Next' })}
|
|
61
61
|
>
|
|
62
|
-
<ArrowRightIcon
|
|
62
|
+
<ArrowRightIcon />
|
|
63
63
|
</button>
|
|
64
64
|
</div>
|
|
65
65
|
<div className="v2-pagination__info">
|
|
@@ -14,28 +14,9 @@
|
|
|
14
14
|
display: flex;
|
|
15
15
|
flex-wrap: wrap;
|
|
16
16
|
gap: 8px;
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
&__option {
|
|
20
|
-
padding: 4px 16px;
|
|
21
|
-
border-radius: 100px;
|
|
22
|
-
border: 1px solid var(--border-primary, #E8E9EF);
|
|
23
|
-
background-color: var(--neutral-white, #FFFFFF);
|
|
24
|
-
font-size: var(--text-small-size, 13px);
|
|
25
|
-
font-weight: 500;
|
|
26
|
-
color: var(--label-primary, #121E52);
|
|
27
|
-
cursor: pointer;
|
|
28
|
-
transition: all 0.2s ease;
|
|
29
17
|
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
&--active {
|
|
35
|
-
background-color: var(--fill-primary);
|
|
36
|
-
border-color: var(--border-selected, #121E52);
|
|
37
|
-
color: var(--neutral-white, #FFFFFF);
|
|
38
|
-
font-weight: 600;
|
|
18
|
+
.ghost-button {
|
|
19
|
+
border-radius: 100px;
|
|
39
20
|
}
|
|
40
21
|
}
|
|
41
22
|
}
|
|
@@ -43,29 +24,36 @@
|
|
|
43
24
|
// Mobile styles
|
|
44
25
|
@media (max-width: 768px) {
|
|
45
26
|
.quick-filter {
|
|
46
|
-
|
|
27
|
+
display: flex;
|
|
28
|
+
flex-direction: row;
|
|
47
29
|
align-items: flex-start;
|
|
48
|
-
gap:
|
|
30
|
+
gap: 12px;
|
|
31
|
+
width: 100%;
|
|
49
32
|
|
|
50
33
|
&__label {
|
|
51
34
|
font-size: 12px;
|
|
52
35
|
}
|
|
53
36
|
|
|
54
37
|
&__options {
|
|
55
|
-
|
|
38
|
+
flex: 1;
|
|
39
|
+
display: flex;
|
|
40
|
+
flex-wrap: wrap;
|
|
56
41
|
gap: 6px;
|
|
57
|
-
|
|
42
|
+
padding: 0;
|
|
43
|
+
margin: 0;
|
|
44
|
+
min-width: 0;
|
|
58
45
|
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
46
|
+
.ghost-button {
|
|
47
|
+
flex-shrink: 0;
|
|
48
|
+
border-radius: 100px;
|
|
49
|
+
}
|
|
62
50
|
}
|
|
63
51
|
}
|
|
64
52
|
}
|
|
65
53
|
|
|
66
54
|
@media (max-width: 480px) {
|
|
67
55
|
.quick-filter {
|
|
68
|
-
gap:
|
|
56
|
+
gap: 8px;
|
|
69
57
|
|
|
70
58
|
&__label {
|
|
71
59
|
font-size: 11px;
|
|
@@ -74,11 +62,6 @@
|
|
|
74
62
|
&__options {
|
|
75
63
|
gap: 4px;
|
|
76
64
|
}
|
|
77
|
-
|
|
78
|
-
&__option {
|
|
79
|
-
padding: 2px 10px;
|
|
80
|
-
font-size: 11px;
|
|
81
|
-
}
|
|
82
65
|
}
|
|
83
66
|
}
|
|
84
67
|
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import React from 'react'
|
|
2
|
+
import { GhostButton } from '../Button'
|
|
2
3
|
import './QuickFilter.scss'
|
|
3
4
|
|
|
4
5
|
export interface QuickFilterOption {
|
|
@@ -32,16 +33,17 @@ export const QuickFilter: React.FC<QuickFilterProps> = ({
|
|
|
32
33
|
{label && <span className="quick-filter__label">{label}</span>}
|
|
33
34
|
<div className="quick-filter__options">
|
|
34
35
|
{options.map((option) => (
|
|
35
|
-
<
|
|
36
|
+
<GhostButton
|
|
36
37
|
key={option.value}
|
|
37
38
|
type="button"
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
39
|
+
size="sm"
|
|
40
|
+
className={
|
|
41
|
+
selectedValues?.includes(option.value) ? 'active' : ''
|
|
42
|
+
}
|
|
41
43
|
onClick={() => toggleOption(option.value)}
|
|
42
44
|
>
|
|
43
45
|
{option.label}
|
|
44
|
-
</
|
|
46
|
+
</GhostButton>
|
|
45
47
|
))}
|
|
46
48
|
</div>
|
|
47
49
|
</div>
|
|
@@ -6,10 +6,8 @@ export interface SectionHeaderProps {
|
|
|
6
6
|
className?: string;
|
|
7
7
|
}
|
|
8
8
|
|
|
9
|
-
export const SectionHeader: React.FC<SectionHeaderProps> = ({ title, className = '' }) =>
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
);
|
|
15
|
-
};
|
|
9
|
+
export const SectionHeader: React.FC<SectionHeaderProps> = ({ title, className = '' }) => (
|
|
10
|
+
<span className={`section-header ${className}`}>
|
|
11
|
+
{title}
|
|
12
|
+
</span>
|
|
13
|
+
);
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import React from 'react'
|
|
2
|
+
import { ArrowUpIcon, ArrowDownIcon } from '../../icons'
|
|
3
|
+
|
|
4
|
+
export type SortDirection = 'asc' | 'desc' | null
|
|
5
|
+
|
|
6
|
+
export interface TableSortIconProps {
|
|
7
|
+
active?: boolean
|
|
8
|
+
direction: SortDirection
|
|
9
|
+
className?: string
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export const TableSortIcon: React.FC<TableSortIconProps> = ({ active = false, direction, className = '' }) => {
|
|
13
|
+
if (!active || !direction) return null
|
|
14
|
+
|
|
15
|
+
return (
|
|
16
|
+
<span className={className}>
|
|
17
|
+
{direction === 'asc' ? <ArrowUpIcon /> : <ArrowDownIcon />}
|
|
18
|
+
</span>
|
|
19
|
+
)
|
|
20
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './TableSortIcon'
|
|
@@ -62,8 +62,8 @@ export const QuoteAltIcon = () => (
|
|
|
62
62
|
export const DividerIcon = () => (
|
|
63
63
|
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none">
|
|
64
64
|
<rect x="5.25" y="11.25" width="13.5" height="1.5" fill="#626A90"/>
|
|
65
|
-
<circle cx="21.75" cy="12" r="0.75" fill="#626A90"
|
|
66
|
-
<circle cx="2.25" cy="12" r="0.75" fill="#626A90"
|
|
65
|
+
<circle cx="21.75" cy="12" r="0.75" fill="#626A90" fillOpacity="0.5"/>
|
|
66
|
+
<circle cx="2.25" cy="12" r="0.75" fill="#626A90" fillOpacity="0.5"/>
|
|
67
67
|
</svg>
|
|
68
68
|
);
|
|
69
69
|
|
|
@@ -7,6 +7,9 @@ export type { QuickFilterProps, QuickFilterOption } from './QuickFilter'
|
|
|
7
7
|
export { NewTable } from './NewTable'
|
|
8
8
|
export type { NewTableProps, NewTableColumn } from './NewTable'
|
|
9
9
|
|
|
10
|
+
export { TableSortIcon } from './TableSortIcon'
|
|
11
|
+
export type { TableSortIconProps } from './TableSortIcon'
|
|
12
|
+
|
|
10
13
|
|
|
11
14
|
export { ActionMenu } from './ActionMenu'
|
|
12
15
|
export type { ActionMenuProps, ActionMenuItem } from './ActionMenu'
|
|
@@ -34,8 +37,8 @@ export { SectionHeader } from './SectionHeader'
|
|
|
34
37
|
export type { SectionHeaderProps } from './SectionHeader'
|
|
35
38
|
|
|
36
39
|
// Existing Components
|
|
37
|
-
export { Button, ButtonText } from './Button'
|
|
38
|
-
export type { ButtonProps, ButtonTextProps } from './Button'
|
|
40
|
+
export { Button, ButtonText, GhostButton } from './Button'
|
|
41
|
+
export type { ButtonProps, ButtonTextProps, GhostButtonProps } from './Button'
|
|
39
42
|
|
|
40
43
|
export { Select } from './Select'
|
|
41
44
|
|
|
@@ -69,6 +72,8 @@ export {
|
|
|
69
72
|
ExternalLinkIcon,
|
|
70
73
|
ExportIcon,
|
|
71
74
|
ClearIcon,
|
|
72
|
-
CloseIcon
|
|
75
|
+
CloseIcon,
|
|
76
|
+
EllipsisIcon,
|
|
77
|
+
CircleIcon
|
|
73
78
|
} from '../icons'
|
|
74
79
|
|
package/src/v2/icons/index.tsx
CHANGED
|
@@ -207,5 +207,19 @@ export const CloseIcon = ({width = 24, height = 24, ...props
|
|
|
207
207
|
</svg>
|
|
208
208
|
)
|
|
209
209
|
|
|
210
|
+
export const EllipsisIcon = ({ width = 32, height = 32, fill = 'black', ...props }: React.SVGProps<SVGSVGElement> & { width?: number; height?: number; fill?: string } = {}) => (
|
|
211
|
+
<svg width={width} height={height} viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg" {...props}>
|
|
212
|
+
<circle cx="8" cy="16" r="3" fill={fill} />
|
|
213
|
+
<circle cx="16" cy="16" r="3" fill={fill} />
|
|
214
|
+
<circle cx="24" cy="16" r="3" fill={fill} />
|
|
215
|
+
</svg>
|
|
216
|
+
)
|
|
217
|
+
|
|
218
|
+
export const CircleIcon = ({ width = 32, height = 32, fill = 'var(--surface-action-soft)', className = '', ...props }: React.SVGProps<SVGSVGElement> & { width?: number; height?: number; fill?: string } = {}) => (
|
|
219
|
+
<svg width={width} height={height} viewBox="0 0 32 32" fill="none" className={className} xmlns="http://www.w3.org/2000/svg" {...props}>
|
|
220
|
+
<circle cx="16" cy="16" r="16" fill={fill} />
|
|
221
|
+
</svg>
|
|
222
|
+
)
|
|
223
|
+
|
|
210
224
|
|
|
211
225
|
|