@capillarytech/blaze-ui 0.1.6-alpha.40 → 0.1.6-alpha.41
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/.DS_Store +0 -0
- package/CapUnifiedSelect/CapUnifiedSelect.js +59 -58
- package/CapUnifiedSelect/styles.js +59 -301
- package/package.json +1 -1
package/.DS_Store
ADDED
|
Binary file
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
// Enhanced CapUnifiedSelect supporting 4 scenarios with advanced features in a single TreeSelect
|
|
2
|
-
import React, { useState, useEffect } from 'react';
|
|
2
|
+
import React, { useState, useEffect, useMemo, useCallback, memo } from 'react';
|
|
3
3
|
import PropTypes from 'prop-types';
|
|
4
4
|
import classnames from 'classnames';
|
|
5
5
|
import { TreeSelect, Tooltip, Input, Button } from 'antd-v5';
|
|
6
6
|
import styled from 'styled-components';
|
|
7
|
+
import * as styledVars from '../styled/variables';
|
|
7
8
|
import uploadIcon from '../assets/upload.svg';
|
|
8
9
|
|
|
9
10
|
import { InfoCircleOutlined, SearchOutlined, WarningFilled, DownOutlined } from '@ant-design/icons';
|
|
@@ -55,14 +56,14 @@ const CapUnifiedSelect = ({
|
|
|
55
56
|
listItemHeight: 32,
|
|
56
57
|
};
|
|
57
58
|
|
|
58
|
-
const NoResult = ({ noResultText, className }) => (
|
|
59
|
+
const NoResult = memo(({ noResultText, className }) => (
|
|
59
60
|
<div className={classnames(className, "cap-unified-select-no-result")}>
|
|
60
61
|
<WarningFilled className="cap-unified-select-no-result-icon" />
|
|
61
62
|
<div className="cap-unified-select-no-result-text">{noResultText}</div>
|
|
62
63
|
</div>
|
|
63
|
-
);
|
|
64
|
+
));
|
|
64
65
|
|
|
65
|
-
const getFilteredTreeData = (data, search) => {
|
|
66
|
+
const getFilteredTreeData = useCallback((data, search) => {
|
|
66
67
|
if (!search) return data;
|
|
67
68
|
|
|
68
69
|
const filterNode = node => {
|
|
@@ -73,7 +74,6 @@ const CapUnifiedSelect = ({
|
|
|
73
74
|
const keyText = String(node.key || '').toLowerCase();
|
|
74
75
|
return keyText.includes(search.toLowerCase());
|
|
75
76
|
} else {
|
|
76
|
-
// Default case, fall back to label
|
|
77
77
|
const labelText = node.label?.toLowerCase() || '';
|
|
78
78
|
return labelText.includes(search.toLowerCase());
|
|
79
79
|
}
|
|
@@ -89,69 +89,70 @@ const CapUnifiedSelect = ({
|
|
|
89
89
|
}).filter(Boolean);
|
|
90
90
|
|
|
91
91
|
return loop(data);
|
|
92
|
-
};
|
|
92
|
+
}, [searchBasedOn]);
|
|
93
93
|
|
|
94
|
-
const flattenLeafValues = nodes =>
|
|
95
|
-
nodes?.flatMap(node => node.children ? flattenLeafValues(node.children) : [node.value]) || [];
|
|
94
|
+
const flattenLeafValues = useCallback(nodes =>
|
|
95
|
+
nodes?.flatMap(node => node.children ? flattenLeafValues(node.children) : [node.value]) || [], []);
|
|
96
96
|
|
|
97
|
-
const isMulti = type === 'multiSelect' || type === 'multiTreeSelect';
|
|
98
|
-
const isTree = type === 'treeSelect' || type === 'multiTreeSelect';
|
|
97
|
+
const isMulti = useMemo(() => type === 'multiSelect' || type === 'multiTreeSelect', [type]);
|
|
98
|
+
const isTree = useMemo(() => type === 'treeSelect' || type === 'multiTreeSelect', [type]);
|
|
99
99
|
|
|
100
|
-
const dataSource =
|
|
100
|
+
const dataSource = useMemo(() => {
|
|
101
|
+
return isTree ? options : options.map(opt => ({ title: opt.label, value: opt.value, key: opt.key || opt.value }));
|
|
102
|
+
}, [isTree, options]);
|
|
101
103
|
|
|
102
|
-
const filteredTree = getFilteredTreeData(dataSource, searchText);
|
|
103
|
-
const leafValues = flattenLeafValues(filteredTree);
|
|
104
|
+
const filteredTree = useMemo(() => getFilteredTreeData(dataSource, searchText), [dataSource, searchText]);
|
|
105
|
+
const leafValues = useMemo(() => flattenLeafValues(filteredTree), [filteredTree]);
|
|
104
106
|
|
|
105
|
-
const handleSelectAll = () => {
|
|
107
|
+
const handleSelectAll = useCallback(() => {
|
|
106
108
|
const availableValues = leafValues;
|
|
107
109
|
if (allSelected) {
|
|
108
|
-
// If currently all selected, then unselect all
|
|
109
110
|
setTempValue([]);
|
|
110
111
|
setAllSelected(false);
|
|
111
112
|
} else {
|
|
112
|
-
// Otherwise select all available options
|
|
113
113
|
setTempValue(availableValues);
|
|
114
114
|
setAllSelected(true);
|
|
115
115
|
}
|
|
116
|
-
};
|
|
116
|
+
}, [allSelected, leafValues]);
|
|
117
117
|
|
|
118
118
|
useEffect(() => {
|
|
119
119
|
if (isMulti && Array.isArray(tempValue)) {
|
|
120
|
-
|
|
120
|
+
const allItemsSelected = tempValue.length > 0 && leafValues.length > 0 && tempValue.length === leafValues.length;
|
|
121
|
+
setAllSelected(allItemsSelected);
|
|
121
122
|
}
|
|
122
123
|
}, [tempValue, leafValues, isMulti]);
|
|
123
124
|
|
|
124
|
-
const handleConfirm = () => {
|
|
125
|
-
console.log('Confirm clicked');
|
|
125
|
+
const handleConfirm = useCallback(() => {
|
|
126
126
|
if (onChange) onChange(tempValue);
|
|
127
|
-
};
|
|
127
|
+
}, [onChange, tempValue]);
|
|
128
128
|
|
|
129
|
-
const handleCancel = () => {
|
|
130
|
-
console.log('Cancel clicked');
|
|
129
|
+
const handleCancel = useCallback(() => {
|
|
131
130
|
setTempValue(value);
|
|
132
|
-
};
|
|
131
|
+
}, [value]);
|
|
133
132
|
|
|
134
|
-
const handleTempChange = newValue => {
|
|
133
|
+
const handleTempChange = useCallback(newValue => {
|
|
135
134
|
setTempValue(newValue);
|
|
136
|
-
};
|
|
135
|
+
}, []);
|
|
137
136
|
|
|
138
|
-
const suffix =
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
137
|
+
const suffix = useMemo(() => {
|
|
138
|
+
return isMulti && Array.isArray(value) && value?.length > 1 ? (
|
|
139
|
+
<>
|
|
140
|
+
<span>+{value.length - 1} more <DownOutlined /></span>
|
|
141
|
+
</>
|
|
142
|
+
) : (
|
|
143
|
+
<DownOutlined />
|
|
144
|
+
);
|
|
145
|
+
}, [isMulti, value]);
|
|
145
146
|
|
|
146
|
-
const prefix = () => {
|
|
147
|
+
const prefix = useMemo(() => {
|
|
147
148
|
if (isMulti && Array.isArray(value) && value?.length > 0) {
|
|
148
149
|
const selectedLabels = options.filter(opt => value.includes(opt.value)).map(opt => opt.label);
|
|
149
150
|
return selectedLabels[0];
|
|
150
151
|
}
|
|
151
152
|
return null;
|
|
152
|
-
};
|
|
153
|
+
}, [isMulti, value, options]);
|
|
153
154
|
|
|
154
|
-
const renderHeader = () => {
|
|
155
|
+
const renderHeader = useCallback(() => {
|
|
155
156
|
if (!headerLabel && !tooltip) return null;
|
|
156
157
|
return (
|
|
157
158
|
<>
|
|
@@ -168,7 +169,7 @@ const CapUnifiedSelect = ({
|
|
|
168
169
|
</div>
|
|
169
170
|
</>
|
|
170
171
|
);
|
|
171
|
-
};
|
|
172
|
+
}, [headerLabel, tooltip, bylineText, disabled]);
|
|
172
173
|
|
|
173
174
|
const renderDropdown = () => {
|
|
174
175
|
const currentItems = filteredTree;
|
|
@@ -184,9 +185,9 @@ const CapUnifiedSelect = ({
|
|
|
184
185
|
return (
|
|
185
186
|
<div className={classnames(popupClassName, `${type}-popup-container`)}>
|
|
186
187
|
{showSearch && (
|
|
187
|
-
<div
|
|
188
|
+
<div className={classnames("cap-unified-select-search-container")}>
|
|
188
189
|
<Input
|
|
189
|
-
prefix={<SearchOutlined style={{ color:
|
|
190
|
+
prefix={<SearchOutlined style={{ color: styledVars.CAP_G06 }} />}
|
|
190
191
|
placeholder="Search"
|
|
191
192
|
variant="borderless"
|
|
192
193
|
value={searchText}
|
|
@@ -196,40 +197,33 @@ const CapUnifiedSelect = ({
|
|
|
196
197
|
</div>
|
|
197
198
|
)}
|
|
198
199
|
{isMulti && showUpload && (
|
|
199
|
-
<div
|
|
200
|
+
<div className={classnames("cap-unified-select-upload-container")}>
|
|
200
201
|
<Button
|
|
201
202
|
type="link"
|
|
202
|
-
icon={<img src={uploadIcon} alt="upload"
|
|
203
|
+
icon={<img src={uploadIcon} alt="upload" />}
|
|
203
204
|
onClick={() => {}}
|
|
204
|
-
|
|
205
|
-
color: '#2466EA', // AntD primary blue
|
|
206
|
-
display: 'flex',
|
|
207
|
-
alignItems: 'center',
|
|
208
|
-
fontSize: '14px',
|
|
209
|
-
fontWeight: '400',
|
|
210
|
-
lineHeight: '20px',
|
|
211
|
-
}}
|
|
205
|
+
className={classnames("cap-unified-select-upload-button")}
|
|
212
206
|
>
|
|
213
207
|
Upload
|
|
214
208
|
</Button>
|
|
215
209
|
</div>
|
|
216
210
|
)}
|
|
217
211
|
{isMulti && currentItems.length > 0 && (
|
|
218
|
-
<div
|
|
219
|
-
|
|
220
|
-
<label
|
|
212
|
+
<div className={classnames("cap-unified-select-select-all-container")} onClick={e => { e.stopPropagation(); handleSelectAll(); }}>
|
|
213
|
+
<input type="checkbox" checked={allSelected} className={classnames("cap-unified-select-select-all-checkbox")} onClick={e => e.stopPropagation()} />
|
|
214
|
+
<label className={classnames("cap-unified-select-select-all-label")}>Select all</label>
|
|
221
215
|
</div>
|
|
222
216
|
)}
|
|
223
217
|
|
|
224
218
|
{currentItems.length === 0 ? <NoResult noResultText={noResultText} className={classnames(className, "cap-unified-select-no-result")}/> : menu}
|
|
225
219
|
|
|
226
220
|
{currentItems.length > 0 && isMulti && (
|
|
227
|
-
<div
|
|
221
|
+
<div className={classnames("cap-unified-select-confirm-container")}>
|
|
228
222
|
<div>
|
|
229
|
-
<Button type="primary" size="small"
|
|
223
|
+
<Button type="primary" size="small" className={classnames("cap-unified-select-confirm-button")} onClick={e => { e.stopPropagation(); handleConfirm(); }}>Confirm</Button>
|
|
230
224
|
<Button type="text" size="small" onClick={e => { e.stopPropagation(); handleCancel(); }}>Cancel</Button>
|
|
231
225
|
</div>
|
|
232
|
-
{selectedCount > 0 && <span
|
|
226
|
+
{selectedCount > 0 && <span className={classnames("cap-unified-select-selected-count")}>{selectedCount} selected</span>}
|
|
233
227
|
</div>
|
|
234
228
|
)}
|
|
235
229
|
</div>
|
|
@@ -245,9 +239,10 @@ const CapUnifiedSelect = ({
|
|
|
245
239
|
value={customPopupRender ? tempValue : value}
|
|
246
240
|
onChange={customPopupRender ? handleTempChange : onChange}
|
|
247
241
|
placeholder={placeholder}
|
|
242
|
+
showSearch={false}
|
|
248
243
|
maxTagCount={0}
|
|
249
244
|
maxTagPlaceholder={() => null}
|
|
250
|
-
prefix={isMulti && value.length > 0 && prefix
|
|
245
|
+
prefix={isMulti && value.length > 0 && prefix}
|
|
251
246
|
suffixIcon={suffix}
|
|
252
247
|
className={classnames(`cap-unified-tree-select ${className || ''}`)}
|
|
253
248
|
style={style}
|
|
@@ -262,7 +257,7 @@ const CapUnifiedSelect = ({
|
|
|
262
257
|
{...treeSelectVirtualizationProps}
|
|
263
258
|
popupRender={renderCustomDropdown}
|
|
264
259
|
/>
|
|
265
|
-
{isError && <div
|
|
260
|
+
{isError && <div className={classnames("cap-unified-select-status")}>{errorMessage}</div>}
|
|
266
261
|
</>
|
|
267
262
|
);
|
|
268
263
|
};
|
|
@@ -300,12 +295,18 @@ CapUnifiedSelect.propTypes = {
|
|
|
300
295
|
|
|
301
296
|
CapUnifiedSelect.defaultProps = {
|
|
302
297
|
type: 'select',
|
|
298
|
+
options: [],
|
|
299
|
+
placeholder: 'Select an option',
|
|
303
300
|
allowClear: false,
|
|
304
|
-
customPopupRender:
|
|
301
|
+
customPopupRender: true,
|
|
305
302
|
showSearch: true,
|
|
306
303
|
searchBasedOn: 'label',
|
|
307
304
|
className: '',
|
|
308
305
|
popupClassName: '',
|
|
306
|
+
disabled: false,
|
|
307
|
+
showUpload: false,
|
|
308
|
+
isError: false,
|
|
309
|
+
noResultText: 'No results found'
|
|
309
310
|
};
|
|
310
311
|
|
|
311
312
|
export default withStyles(CapUnifiedSelect, selectStyles);
|
|
@@ -95,10 +95,33 @@ export const StyledInfoIcon = styled.span`
|
|
|
95
95
|
|
|
96
96
|
export const selectStyles = css`
|
|
97
97
|
&.cap-unified-select-container {
|
|
98
|
+
.ant-tree-select-dropdown{
|
|
99
|
+
padding: 0px !important;
|
|
100
|
+
}
|
|
98
101
|
.cap-unified-tree-select{
|
|
99
|
-
height:
|
|
102
|
+
height: 40px !important;
|
|
100
103
|
width: 340px !important;
|
|
101
104
|
}
|
|
105
|
+
.cap-unified-select-upload-container{
|
|
106
|
+
cursor: pointer !important;
|
|
107
|
+
display: flex !important;
|
|
108
|
+
align-items: center !important;
|
|
109
|
+
border-bottom: 1px solid #f0f0f0 !important;
|
|
110
|
+
height: 40px !important;
|
|
111
|
+
}
|
|
112
|
+
.cap-unified-select-select-all-container{
|
|
113
|
+
padding: 8px 12px !important;
|
|
114
|
+
cursor: pointer !important;
|
|
115
|
+
display: flex !important;
|
|
116
|
+
align-items: center !important;
|
|
117
|
+
border-bottom: 1px solid #f0f0f0 !important;
|
|
118
|
+
height: 40px !important;
|
|
119
|
+
}
|
|
120
|
+
.ant-select-dropdown{
|
|
121
|
+
margin-top: -5px !important;
|
|
122
|
+
border-radius: 4px !important;
|
|
123
|
+
box-shadow: 0px 4px 8px -2px #091E4240, 0px 0px 1px 0px #091E424F !important;
|
|
124
|
+
}
|
|
102
125
|
.ant-select-prefix{
|
|
103
126
|
font-size: 14px !important;
|
|
104
127
|
font-weight: 400 !important;
|
|
@@ -115,7 +138,7 @@ export const selectStyles = css`
|
|
|
115
138
|
.cap-unified-select-header-tooltip{
|
|
116
139
|
width: 16px !important;
|
|
117
140
|
height: 16px !important;
|
|
118
|
-
color:
|
|
141
|
+
color: ${styledVars.CAP_G06} !important;
|
|
119
142
|
}
|
|
120
143
|
.cap-unified-select-header-byline-text{
|
|
121
144
|
font-family: ${styledVars.FONT_FAMILY} !important;
|
|
@@ -135,6 +158,10 @@ export const selectStyles = css`
|
|
|
135
158
|
.ant-tree-select-dropdown .treeSelect-popup-container .ant-select-tree .ant-select-tree-treenode{
|
|
136
159
|
margin: 0px !important;
|
|
137
160
|
}
|
|
161
|
+
.ant-tree-select-dropdown .ant-select-tree .ant-select-tree-treenode{
|
|
162
|
+
line-height: 40px !important;
|
|
163
|
+
margin-bottom: 0px !important;
|
|
164
|
+
}
|
|
138
165
|
.cap-unified-tree-select .multiSelect-popup-container .ant-tree-select-dropdown .ant-select-tree .ant-select-tree-treenode{
|
|
139
166
|
margin-left: 10px !important;
|
|
140
167
|
}
|
|
@@ -158,312 +185,43 @@ export const selectStyles = css`
|
|
|
158
185
|
.cap-unified-select-no-result-text{
|
|
159
186
|
font-weight: 500;
|
|
160
187
|
}
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
width: 100%;
|
|
164
|
-
font-family: ${styledVars.FONT_FAMILY};
|
|
165
|
-
|
|
166
|
-
.ant-select-selector {
|
|
167
|
-
border-radius: ${styledVars.RADIUS_04};
|
|
168
|
-
transition: ${styledVars.TRANSITION_ALL};
|
|
169
|
-
padding: 0 12px;
|
|
170
|
-
min-height: 32px;
|
|
171
|
-
display: flex;
|
|
172
|
-
align-items: center;
|
|
173
|
-
|
|
174
|
-
&:hover {
|
|
175
|
-
border-color: ${styledVars.CAP_G11};
|
|
176
|
-
}
|
|
177
|
-
}
|
|
178
|
-
|
|
179
|
-
/* Right slot content styles */
|
|
180
|
-
.cap-unified-select-right-slot {
|
|
181
|
-
display: flex;
|
|
182
|
-
align-items: center;
|
|
183
|
-
gap: 8px;
|
|
184
|
-
margin-left: 8px;
|
|
185
|
-
}
|
|
186
|
-
|
|
187
|
-
&.ant-select-focused {
|
|
188
|
-
.ant-select-selector {
|
|
189
|
-
border-color: ${styledVars.CAP_G01} !important;
|
|
190
|
-
box-shadow: none !important;
|
|
191
|
-
}
|
|
192
|
-
}
|
|
193
|
-
|
|
194
|
-
/* Error state */
|
|
195
|
-
&.ant-select-status-error {
|
|
196
|
-
.ant-select-selector {
|
|
197
|
-
border-color: ${styledVars.CAP_RED};
|
|
198
|
-
}
|
|
199
|
-
}
|
|
200
|
-
|
|
201
|
-
/* Disabled state */
|
|
202
|
-
&.ant-select-disabled {
|
|
203
|
-
.ant-select-selector {
|
|
204
|
-
background-color: ${styledVars.CAP_G08};
|
|
205
|
-
cursor: not-allowed;
|
|
206
|
-
}
|
|
207
|
-
}
|
|
208
|
-
|
|
209
|
-
/* Dropdown styles */
|
|
210
|
-
.ant-select-dropdown,
|
|
211
|
-
&.ant-select-dropdown,
|
|
212
|
-
&.ant-select-dropdown-placement-bottomLeft {
|
|
213
|
-
padding: 0;
|
|
214
|
-
border-radius: 12px !important;
|
|
215
|
-
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.08);
|
|
216
|
-
overflow: hidden;
|
|
217
|
-
|
|
218
|
-
/* Option base style - no background */
|
|
219
|
-
.ant-select-item-option {
|
|
220
|
-
padding: 10px 16px;
|
|
221
|
-
font-size: 14px;
|
|
222
|
-
color: #1c2530;
|
|
223
|
-
font-weight: 500;
|
|
224
|
-
background-color: transparent !important;
|
|
225
|
-
|
|
226
|
-
/* Hover state only */
|
|
227
|
-
&:not(.ant-select-item-option-disabled):hover {
|
|
228
|
-
background-color: #fffbe6 !important;
|
|
229
|
-
border-radius: 4px;
|
|
230
|
-
color: #1c2530 !important;
|
|
231
|
-
}
|
|
232
|
-
|
|
233
|
-
/* Ensure unselected hover has proper background even after removal */
|
|
234
|
-
&:hover:not(.ant-select-item-option-disabled):not(.ant-select-item-option-selected) {
|
|
235
|
-
background-color: #fffbe6 !important;
|
|
236
|
-
color: #1c2530 !important;
|
|
237
|
-
border-radius: 4px;
|
|
238
|
-
}
|
|
239
|
-
|
|
240
|
-
/* Selected state */
|
|
241
|
-
&-selected:not(.ant-select-item-option-disabled) {
|
|
242
|
-
background-color: #e9f0fe !important;
|
|
243
|
-
color: #1c2530 !important;
|
|
244
|
-
font-weight: 500;
|
|
245
|
-
}
|
|
246
|
-
|
|
247
|
-
/* Remove active state background unless hovered */
|
|
248
|
-
&-active:not(:hover):not(.ant-select-item-option-disabled) {
|
|
249
|
-
background-color: transparent !important;
|
|
250
|
-
}
|
|
251
|
-
}
|
|
252
|
-
|
|
253
|
-
/* Search input styles */
|
|
254
|
-
.ant-select-dropdown-search,
|
|
255
|
-
.ant-select-search {
|
|
256
|
-
padding: 8px 12px;
|
|
257
|
-
border-bottom: 1px solid #f0f0f0;
|
|
258
|
-
|
|
259
|
-
input {
|
|
260
|
-
border-radius: ${styledVars.RADIUS_04};
|
|
261
|
-
transition: ${styledVars.TRANSITION_ALL};
|
|
262
|
-
|
|
263
|
-
&:focus {
|
|
264
|
-
border-color: ${styledVars.CAP_G01};
|
|
265
|
-
box-shadow: none;
|
|
266
|
-
}
|
|
267
|
-
}
|
|
268
|
-
}
|
|
269
|
-
|
|
270
|
-
/* Scrollbar */
|
|
271
|
-
.rc-virtual-list-scrollbar-thumb {
|
|
272
|
-
background-color: #dcdcdc;
|
|
273
|
-
border-radius: 4px;
|
|
274
|
-
}
|
|
275
|
-
|
|
276
|
-
/* Divider */
|
|
277
|
-
.ant-divider-horizontal {
|
|
278
|
-
margin: 0;
|
|
279
|
-
}
|
|
280
|
-
|
|
281
|
-
/* No result UI */
|
|
282
|
-
.no-result {
|
|
283
|
-
display: flex;
|
|
284
|
-
flex-direction: column;
|
|
285
|
-
align-items: center;
|
|
286
|
-
justify-content: center;
|
|
287
|
-
height: 200px;
|
|
288
|
-
color: #8c8c8c;
|
|
289
|
-
font-size: 14px;
|
|
290
|
-
}
|
|
291
|
-
|
|
292
|
-
/* Dropdown search inside custom popup */
|
|
293
|
-
.dropdown-search {
|
|
294
|
-
padding: 8px;
|
|
295
|
-
border-bottom: 1px solid #f0f0f0;
|
|
296
|
-
}
|
|
297
|
-
|
|
298
|
-
/* Select all checkbox */
|
|
299
|
-
.select-all-checkbox {
|
|
300
|
-
display: flex;
|
|
301
|
-
align-items: center;
|
|
302
|
-
padding: 8px 12px;
|
|
303
|
-
cursor: pointer;
|
|
304
|
-
font-weight: 500;
|
|
305
|
-
border-bottom: 1px solid #f0f0f0;
|
|
306
|
-
user-select: none;
|
|
307
|
-
|
|
308
|
-
input[type="checkbox"] {
|
|
309
|
-
cursor: pointer;
|
|
310
|
-
}
|
|
311
|
-
}
|
|
312
|
-
|
|
313
|
-
/* Footer buttons */
|
|
314
|
-
.dropdown-footer {
|
|
315
|
-
display: flex;
|
|
316
|
-
justify-content: space-between;
|
|
317
|
-
align-items: center;
|
|
318
|
-
padding: 8px;
|
|
319
|
-
border-top: 1px solid #f0f0f0;
|
|
320
|
-
}
|
|
321
|
-
|
|
322
|
-
/* Selected counter */
|
|
323
|
-
.selected-count {
|
|
324
|
-
color: #8c8c8c;
|
|
325
|
-
font-size: 12px;
|
|
326
|
-
}
|
|
327
|
-
|
|
328
|
-
/* Unchecked border color */
|
|
329
|
-
.ant-checkbox-inner {
|
|
330
|
-
border-color: #42b040; /* Your desired border color */
|
|
331
|
-
}
|
|
332
|
-
|
|
333
|
-
/* When checked - change background and border */
|
|
334
|
-
.ant-checkbox-checked .ant-checkbox-inner {
|
|
335
|
-
background-color: #42b040; /* Fill color when checked */
|
|
336
|
-
border-color: #42b040;
|
|
337
|
-
}
|
|
338
|
-
|
|
339
|
-
/* Checkmark color */
|
|
340
|
-
.ant-checkbox-checked .ant-checkbox-inner::after {
|
|
341
|
-
border-color: #42b040; /* The checkmark tick color */
|
|
342
|
-
}
|
|
188
|
+
.ant-tree-select:hover .ant-select-selector {
|
|
189
|
+
border-color: #7A869A !important;
|
|
343
190
|
}
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
border: none;
|
|
350
|
-
border-radius: ${styledVars.RADIUS_04};
|
|
351
|
-
color: #1c2530;
|
|
352
|
-
font-weight: 500;
|
|
353
|
-
margin: 2px 4px 2px 0;
|
|
354
|
-
padding: 0 8px;
|
|
355
|
-
height: 24px;
|
|
356
|
-
line-height: 22px;
|
|
357
|
-
|
|
358
|
-
&-remove {
|
|
359
|
-
color: ${styledVars.CAP_PRIMARY.base};
|
|
360
|
-
|
|
361
|
-
&:hover {
|
|
362
|
-
color: ${styledVars.CAP_PRIMARY.hover};
|
|
363
|
-
}
|
|
364
|
-
}
|
|
365
|
-
}
|
|
366
|
-
|
|
367
|
-
.ant-select-selection-overflow {
|
|
368
|
-
flex-wrap: wrap;
|
|
369
|
-
gap: 4px;
|
|
370
|
-
}
|
|
191
|
+
.ant-tree-select-focused .ant-select-selector,
|
|
192
|
+
.ant-tree-select-open .ant-select-selector {
|
|
193
|
+
border-color: #7A869A !important;
|
|
194
|
+
box-shadow: none !important;
|
|
195
|
+
outline: none !important; /* remove blue outline */
|
|
371
196
|
}
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
padding: 4px 0;
|
|
376
|
-
|
|
377
|
-
.ant-select-tree-node-content-wrapper {
|
|
378
|
-
padding: 4px 8px;
|
|
379
|
-
border-radius: ${styledVars.RADIUS_04};
|
|
380
|
-
background-color: transparent !important;
|
|
381
|
-
transition: background 0.3s;
|
|
382
|
-
|
|
383
|
-
&:hover {
|
|
384
|
-
background-color: #fffbe6 !important;
|
|
385
|
-
color: #1c2530 !important;
|
|
386
|
-
border-radius: 4px;
|
|
387
|
-
}
|
|
388
|
-
|
|
389
|
-
&.ant-select-tree-node-selected {
|
|
390
|
-
color: #1c2530;
|
|
391
|
-
font-weight: 500;
|
|
392
|
-
}
|
|
393
|
-
}
|
|
394
|
-
|
|
395
|
-
.ant-select-tree-switcher {
|
|
396
|
-
width: 24px;
|
|
397
|
-
height: 24px;
|
|
398
|
-
line-height: 24px;
|
|
399
|
-
}
|
|
400
|
-
|
|
401
|
-
.ant-select-tree-checkbox {
|
|
402
|
-
margin: 4px 8px 4px 0;
|
|
403
|
-
}
|
|
404
|
-
|
|
405
|
-
.ant-select-tree-treenode {
|
|
406
|
-
padding: 2px 0;
|
|
407
|
-
|
|
408
|
-
&:hover {
|
|
409
|
-
background-color: transparent;
|
|
410
|
-
}
|
|
411
|
-
}
|
|
412
|
-
|
|
413
|
-
.ant-select-tree-checkbox-checked .ant-select-tree-checkbox-inner {
|
|
414
|
-
background-color: #42b040;
|
|
415
|
-
border-color: #42b040;
|
|
416
|
-
}
|
|
417
|
-
|
|
418
|
-
.ant-select-tree-checkbox-checked .ant-select-tree-node-content-wrapper {
|
|
419
|
-
background-color: #e9f0fe !important;
|
|
420
|
-
color: #1c2530 !important;
|
|
421
|
-
font-weight: 500;
|
|
422
|
-
}
|
|
197
|
+
.cap-unified-select-search-container{
|
|
198
|
+
border-bottom: 1px solid #EBECF0 !important;
|
|
199
|
+
line-height: 40px !important;
|
|
423
200
|
}
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
.ant-select-selection-item {
|
|
433
|
-
height: 28px;
|
|
434
|
-
line-height: 26px;
|
|
435
|
-
}
|
|
201
|
+
.cap-unified-select-upload-button{
|
|
202
|
+
color: ${styledVars.CAP_BLUE01} !important;
|
|
203
|
+
display: flex !important;
|
|
204
|
+
align-items: center !important;
|
|
205
|
+
font-size: 14px !important;
|
|
206
|
+
font-weight: 400 !important;
|
|
207
|
+
line-height: 20px !important;
|
|
436
208
|
}
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
.ant-select-selection-item {
|
|
445
|
-
height: 20px;
|
|
446
|
-
line-height: 18px;
|
|
447
|
-
}
|
|
209
|
+
.cap-unified-select-confirm-container{
|
|
210
|
+
display: flex !important;
|
|
211
|
+
justify-content: space-between !important;
|
|
212
|
+
align-items: center !important;
|
|
213
|
+
padding: 8px 12px !important;
|
|
214
|
+
border-top: 1px solid #f0f0f0 !important;
|
|
448
215
|
}
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
&.ant-select-loading {
|
|
452
|
-
.ant-select-arrow {
|
|
453
|
-
.anticon-loading {
|
|
454
|
-
color: ${styledVars.CAP_PRIMARY.base};
|
|
455
|
-
}
|
|
456
|
-
}
|
|
216
|
+
.cap-unified-select-confirm-button{
|
|
217
|
+
margin-right: 8px !important;
|
|
457
218
|
}
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
219
|
+
.cap-unified-select-selected-count{
|
|
220
|
+
color: ${styledVars.CAP_G05} !important;
|
|
221
|
+
font-size: 14px !important;
|
|
461
222
|
}
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
color: #1c2530;
|
|
465
|
-
font-weight: 500;
|
|
466
|
-
margin-right: 12px; /* optional, adjust spacing */
|
|
223
|
+
.cap-unified-select-status{
|
|
224
|
+
color: #E83135 !important;
|
|
467
225
|
}
|
|
468
226
|
}
|
|
469
227
|
`;
|
package/package.json
CHANGED