react-restyle-components 0.3.66 → 0.3.67
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/lib/src/core-components/src/components/AutoComplete/auto-complete-filter-group-by-multiple-select-multiple-fields-display/auto-complete-filter-group-by-multiple-select-multiple-fields-display.component.d.ts +100 -12
- package/lib/src/core-components/src/components/AutoComplete/auto-complete-filter-group-by-multiple-select-multiple-fields-display/auto-complete-filter-group-by-multiple-select-multiple-fields-display.component.d.ts.map +1 -1
- package/lib/src/core-components/src/components/AutoComplete/auto-complete-filter-group-by-multiple-select-multiple-fields-display/auto-complete-filter-group-by-multiple-select-multiple-fields-display.component.js +85 -51
- package/lib/src/core-components/src/components/AutoComplete/auto-complete-filter-multi-select-multi-fields-display-drag-drop/auto-complete-filter-multi-select-multi-fields-display-drag-drop.component.d.ts +108 -7
- package/lib/src/core-components/src/components/AutoComplete/auto-complete-filter-multi-select-multi-fields-display-drag-drop/auto-complete-filter-multi-select-multi-fields-display-drag-drop.component.d.ts.map +1 -1
- package/lib/src/core-components/src/components/AutoComplete/auto-complete-filter-multi-select-multi-fields-display-drag-drop/auto-complete-filter-multi-select-multi-fields-display-drag-drop.component.js +154 -60
- package/lib/src/core-components/src/components/AutoComplete/autocomplete/autocomplete.d.ts +104 -6
- package/lib/src/core-components/src/components/AutoComplete/autocomplete/autocomplete.d.ts.map +1 -1
- package/lib/src/core-components/src/components/AutoComplete/autocomplete/autocomplete.js +261 -71
- package/lib/src/core-components/src/components/Loader/loader.component.d.ts +13 -1
- package/lib/src/core-components/src/components/Loader/loader.component.d.ts.map +1 -1
- package/lib/src/core-components/src/components/Loader/loader.component.js +121 -3
- package/lib/src/core-components/src/components/check-box/checkBox.component.d.ts.map +1 -1
- package/lib/src/core-components/src/components/check-box/checkBox.component.js +2 -2
- package/lib/src/core-components/src/components/date-picker/date-picker.component.js +2 -2
- package/lib/src/core-components/src/components/radio/radio.component.js +2 -2
- package/lib/src/core-components/src/components/stepper/stepper.component.d.ts +54 -6
- package/lib/src/core-components/src/components/stepper/stepper.component.d.ts.map +1 -1
- package/lib/src/core-components/src/components/stepper/stepper.component.js +127 -19
- package/lib/src/core-components/src/components/timer/timer.component.js +2 -2
- package/lib/src/core-components/src/tc.global.css +7 -1
- package/lib/src/core-components/src/tc.module.css +3 -1036
- package/package.json +1 -1
- package/lib/src/core-components/src/library/assets/svg/CheckedBox.svg +0 -14
- package/lib/src/core-components/src/library/assets/svg/DownArrow.svg +0 -14
- package/lib/src/core-components/src/library/assets/svg/UnCheckbox.svg +0 -3
- package/lib/src/core-components/src/library/assets/svg/UpArrow.svg +0 -14
- package/lib/src/core-components/src/library/assets/svg/checkedRadio.svg +0 -13
- package/lib/src/core-components/src/library/assets/svg/datePicker.svg +0 -3
- package/lib/src/core-components/src/library/assets/svg/index.d.ts +0 -10
- package/lib/src/core-components/src/library/assets/svg/index.d.ts.map +0 -1
- package/lib/src/core-components/src/library/assets/svg/index.js +0 -28
- package/lib/src/core-components/src/library/assets/svg/timer copy.svg +0 -3
- package/lib/src/core-components/src/library/assets/svg/timer.svg +0 -3
- package/lib/src/core-components/src/library/assets/svg/uncheckRadio.svg +0 -3
|
@@ -1,28 +1,61 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
2
|
/* eslint-disable */
|
|
3
|
-
import { useState, useEffect, useRef } from 'react';
|
|
3
|
+
import React, { useState, useEffect, useRef } from 'react';
|
|
4
4
|
import { LoadingAnimateSpin, Icon } from '../../';
|
|
5
5
|
import { DndContext, closestCenter, useSensor, useSensors, PointerSensor, } from '@dnd-kit/core';
|
|
6
6
|
import { arrayMove, SortableContext, useSortable, horizontalListSortingStrategy, } from '@dnd-kit/sortable';
|
|
7
7
|
import { CSS } from '@dnd-kit/utilities';
|
|
8
8
|
import s from '../../../tc.module.css';
|
|
9
9
|
import { cn } from '../../../utils';
|
|
10
|
-
const DraggableSelectedItem = ({ item, index, onRemove, displayKey, uniqueField, }) => {
|
|
11
|
-
const { attributes, listeners, setNodeRef, transform, transition, isDragging } = useSortable({ id: item[uniqueField] });
|
|
10
|
+
export const DraggableSelectedItem = ({ item, index, onRemove, displayKey, uniqueField = 'sort', displayConfig = {}, className, style: customStyle, }) => {
|
|
11
|
+
const { attributes, listeners, setNodeRef, transform, transition, isDragging } = useSortable({ id: item[uniqueField] || item.sort || index.toString() });
|
|
12
12
|
const style = {
|
|
13
13
|
transform: CSS.Transform.toString(transform),
|
|
14
14
|
transition,
|
|
15
15
|
opacity: isDragging ? 0.5 : 1,
|
|
16
|
+
...customStyle,
|
|
16
17
|
};
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
18
|
+
const getItemDisplayText = () => {
|
|
19
|
+
const keys = displayConfig.displayKeys || displayKey || ['name', 'code'];
|
|
20
|
+
const separator = displayConfig.displaySeparator || ' - ';
|
|
21
|
+
return (keys
|
|
22
|
+
.map((key) => item[key])
|
|
23
|
+
.filter(Boolean)
|
|
24
|
+
.join(separator) || 'Unnamed Item');
|
|
25
|
+
};
|
|
26
|
+
const handleRemove = (e) => {
|
|
27
|
+
e.stopPropagation();
|
|
28
|
+
onRemove(index);
|
|
29
|
+
};
|
|
30
|
+
if (displayConfig.renderSelectedBadge) {
|
|
31
|
+
return (_jsx("div", { ref: setNodeRef, style: style, ...attributes, ...listeners, children: displayConfig.renderSelectedBadge(item, index, () => onRemove(index)) }));
|
|
32
|
+
}
|
|
33
|
+
return (_jsxs("div", { ref: setNodeRef, style: style, ...attributes, ...listeners, className: cn(s['flex'], s['text-white'], s['gap-1'], s['bg-blue-500'], s['p-1'], s['rounded'], s['cursor-move'], className), children: [_jsx("div", { className: cn(s['flex'], s['w-fit'], s['cursor-pointer'], s['items-center']), onClick: handleRemove, children: _jsx(Icon, { nameIcon: "BsTrashFill", propsIcon: { size: 16, color: 'white' } }) }), _jsx("span", { children: getItemDisplayText() })] }));
|
|
21
34
|
};
|
|
22
|
-
export const AutoCompleteFilterMultiSelectMultiFieldsDisplayDragDrop = ({
|
|
35
|
+
export const AutoCompleteFilterMultiSelectMultiFieldsDisplayDragDrop = ({ componentKey, uniqueField = '_id', loader = false, placeholder = 'Search...', data, hasError = false, disable = false, isUpperCase = false, name, defaultValue = '', displayConfig = {}, dragDropConfig = {}, selectionConfig = {}, uiConfig = {}, onFilter, onUpdate, onSelect, onBlur, className, style, filterDebounceDelay = 300, }) => {
|
|
36
|
+
// Merge configs with defaults
|
|
37
|
+
const { enabled: dragDropEnabled = true, strategy = horizontalListSortingStrategy, onDragEnd: customOnDragEnd, animationDuration = 200, } = dragDropConfig;
|
|
38
|
+
const { maxSelection, onSelectionChange } = selectionConfig;
|
|
39
|
+
const { showSelectedSection = true, selectedPlaceholder, emptyStateMessage = 'No items available', maxHeight = 'calc(100vh - 20vh)', zIndex = 80, } = uiConfig;
|
|
40
|
+
// Helper to get display text for item
|
|
41
|
+
const getItemDisplayText = (item) => {
|
|
42
|
+
if (displayConfig.renderItem) {
|
|
43
|
+
const rendered = displayConfig.renderItem(item);
|
|
44
|
+
if (typeof rendered === 'string')
|
|
45
|
+
return rendered;
|
|
46
|
+
}
|
|
47
|
+
const keys = displayConfig.displayKeys ||
|
|
48
|
+
data.displayKey ||
|
|
49
|
+
displayConfig.fallbackKeys || ['name', 'code'];
|
|
50
|
+
const separator = displayConfig.displaySeparator || ' - ';
|
|
51
|
+
return (keys
|
|
52
|
+
.map((key) => item[key])
|
|
53
|
+
.filter(Boolean)
|
|
54
|
+
.join(separator) || 'Unnamed Item');
|
|
55
|
+
};
|
|
23
56
|
const [value, setValue] = useState('');
|
|
24
|
-
const [options, setOptions] = useState();
|
|
25
|
-
const [originalOptions, setOriginalOptions] = useState();
|
|
57
|
+
const [options, setOptions] = useState([]);
|
|
58
|
+
const [originalOptions, setOriginalOptions] = useState([]);
|
|
26
59
|
const [isListOpen, setIsListOpen] = useState(false);
|
|
27
60
|
const refSelectedItems = useRef(data?.selected || []);
|
|
28
61
|
const [selectedItems, setSelectedItems] = useState(data?.selected || []);
|
|
@@ -34,8 +67,10 @@ export const AutoCompleteFilterMultiSelectMultiFieldsDisplayDragDrop = ({ key, u
|
|
|
34
67
|
const useOutsideAlerter = (ref) => {
|
|
35
68
|
useEffect(() => {
|
|
36
69
|
function handleClickOutside(event) {
|
|
37
|
-
if (ref.current &&
|
|
38
|
-
|
|
70
|
+
if (ref.current &&
|
|
71
|
+
!ref.current.contains(event.target) &&
|
|
72
|
+
isListOpen) {
|
|
73
|
+
onUpdate(refSelectedItems.current);
|
|
39
74
|
setIsListOpen(false);
|
|
40
75
|
setValue('');
|
|
41
76
|
}
|
|
@@ -44,63 +79,86 @@ export const AutoCompleteFilterMultiSelectMultiFieldsDisplayDragDrop = ({ key, u
|
|
|
44
79
|
return () => {
|
|
45
80
|
document.removeEventListener('mousedown', handleClickOutside);
|
|
46
81
|
};
|
|
47
|
-
}, [ref, isListOpen]);
|
|
82
|
+
}, [ref, isListOpen, onUpdate]);
|
|
48
83
|
};
|
|
49
84
|
const wrapperRef = useRef(null);
|
|
50
85
|
useOutsideAlerter(wrapperRef);
|
|
51
86
|
const getSelectedItem = (selectedItem, list) => {
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
: (item.selected = false);
|
|
61
|
-
return item;
|
|
87
|
+
return list.map((item) => {
|
|
88
|
+
const isSelected = selectedItem && selectedItem.length > 0
|
|
89
|
+
? selectedItem.some((sItem) => sItem[uniqueField] === item[uniqueField])
|
|
90
|
+
: false;
|
|
91
|
+
return {
|
|
92
|
+
...item,
|
|
93
|
+
selected: isSelected,
|
|
94
|
+
};
|
|
62
95
|
});
|
|
63
|
-
list = finalList;
|
|
64
|
-
return list;
|
|
65
96
|
};
|
|
66
97
|
useEffect(() => {
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
98
|
+
const selected = data?.selected || [];
|
|
99
|
+
const list = data?.list || [];
|
|
100
|
+
setOriginalOptions(getSelectedItem(selected, list));
|
|
101
|
+
setOptions(getSelectedItem(selected, list));
|
|
102
|
+
// Update both ref and state with sort field for drag-drop
|
|
103
|
+
const itemsWithSort = selected.map((sItem, index) => ({
|
|
71
104
|
...sItem,
|
|
72
|
-
sort: index
|
|
73
|
-
}))
|
|
105
|
+
sort: index.toString(),
|
|
106
|
+
}));
|
|
74
107
|
refSelectedItems.current = itemsWithSort;
|
|
75
|
-
setSelectedItems(itemsWithSort);
|
|
76
|
-
|
|
108
|
+
setSelectedItems(itemsWithSort);
|
|
109
|
+
// Call selection change callback
|
|
110
|
+
if (onSelectionChange) {
|
|
111
|
+
onSelectionChange(itemsWithSort);
|
|
112
|
+
}
|
|
113
|
+
}, [data, data?.selected, uniqueField, onSelectionChange]);
|
|
114
|
+
const debouncedFilter = React.useMemo(() => {
|
|
115
|
+
if (!onFilter)
|
|
116
|
+
return () => { };
|
|
117
|
+
let timeout;
|
|
118
|
+
return (search) => {
|
|
119
|
+
clearTimeout(timeout);
|
|
120
|
+
timeout = setTimeout(() => {
|
|
121
|
+
onFilter(search);
|
|
122
|
+
}, filterDebounceDelay);
|
|
123
|
+
};
|
|
124
|
+
}, [onFilter, filterDebounceDelay]);
|
|
77
125
|
const onChange = (e) => {
|
|
78
126
|
const search = e.target.value;
|
|
79
127
|
setValue(search);
|
|
80
|
-
|
|
128
|
+
debouncedFilter(search);
|
|
81
129
|
};
|
|
82
130
|
const onKeyUp = (e) => {
|
|
83
131
|
const charCode = e.which ? e.which : e.keyCode;
|
|
84
132
|
if (charCode === 8) {
|
|
85
|
-
const search = e.
|
|
86
|
-
|
|
133
|
+
const search = e.currentTarget.value;
|
|
134
|
+
debouncedFilter(search);
|
|
87
135
|
}
|
|
88
136
|
};
|
|
89
137
|
const onDragEnd = (event) => {
|
|
138
|
+
if (!dragDropEnabled)
|
|
139
|
+
return;
|
|
90
140
|
const { active, over } = event;
|
|
91
|
-
if (active.id
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
141
|
+
if (!over || active.id === over.id)
|
|
142
|
+
return;
|
|
143
|
+
const oldIndex = refSelectedItems.current.findIndex((item) => item.sort === active.id || item[uniqueField] === active.id);
|
|
144
|
+
const newIndex = refSelectedItems.current.findIndex((item) => item.sort === over.id || item[uniqueField] === over.id);
|
|
145
|
+
if (oldIndex !== -1 && newIndex !== -1) {
|
|
146
|
+
const reorderedItems = arrayMove(refSelectedItems.current, oldIndex, newIndex);
|
|
147
|
+
// Update sort values to maintain proper order
|
|
148
|
+
const updatedItems = reorderedItems.map((item, index) => ({
|
|
149
|
+
...item,
|
|
150
|
+
sort: index.toString(),
|
|
151
|
+
}));
|
|
152
|
+
// Update both ref and state to trigger re-render
|
|
153
|
+
refSelectedItems.current = updatedItems;
|
|
154
|
+
setSelectedItems([...updatedItems]);
|
|
155
|
+
// Call custom onDragEnd callback
|
|
156
|
+
if (customOnDragEnd) {
|
|
157
|
+
customOnDragEnd(updatedItems);
|
|
158
|
+
}
|
|
159
|
+
// Call selection change callback
|
|
160
|
+
if (onSelectionChange) {
|
|
161
|
+
onSelectionChange(updatedItems);
|
|
104
162
|
}
|
|
105
163
|
}
|
|
106
164
|
};
|
|
@@ -109,26 +167,62 @@ export const AutoCompleteFilterMultiSelectMultiFieldsDisplayDragDrop = ({ key, u
|
|
|
109
167
|
const secondArr = refSelectedItems.current?.slice(index + 1) || [];
|
|
110
168
|
const fieldsList = [...firstArr, ...secondArr];
|
|
111
169
|
// Update sort values after removal
|
|
112
|
-
const updatedItems = fieldsList
|
|
170
|
+
const updatedItems = fieldsList.map((item, idx) => ({
|
|
113
171
|
...item,
|
|
114
172
|
sort: idx.toString(),
|
|
115
173
|
}));
|
|
116
174
|
refSelectedItems.current = updatedItems;
|
|
117
175
|
setSelectedItems([...updatedItems]);
|
|
176
|
+
// Call selection change callback
|
|
177
|
+
if (onSelectionChange) {
|
|
178
|
+
onSelectionChange(updatedItems);
|
|
179
|
+
}
|
|
180
|
+
};
|
|
181
|
+
const handleSelectItem = (item) => {
|
|
182
|
+
// Check max selection limit
|
|
183
|
+
if (maxSelection &&
|
|
184
|
+
selectedItems.length >= maxSelection &&
|
|
185
|
+
!item.selected) {
|
|
186
|
+
return;
|
|
187
|
+
}
|
|
188
|
+
onSelect(item);
|
|
189
|
+
// Update selected items after selection change
|
|
190
|
+
setTimeout(() => {
|
|
191
|
+
const updatedItems = (data?.selected || []).map((sItem, index) => ({
|
|
192
|
+
...sItem,
|
|
193
|
+
sort: index.toString(),
|
|
194
|
+
}));
|
|
195
|
+
refSelectedItems.current = updatedItems;
|
|
196
|
+
setSelectedItems(updatedItems);
|
|
197
|
+
if (onSelectionChange) {
|
|
198
|
+
onSelectionChange(updatedItems);
|
|
199
|
+
}
|
|
200
|
+
}, 0);
|
|
201
|
+
};
|
|
202
|
+
const getSelectedPlaceholder = () => {
|
|
203
|
+
const count = selectedItems.length;
|
|
204
|
+
if (typeof selectedPlaceholder === 'function') {
|
|
205
|
+
return selectedPlaceholder(count);
|
|
206
|
+
}
|
|
207
|
+
return selectedPlaceholder || `${count} Items`;
|
|
118
208
|
};
|
|
119
|
-
return (_jsx(_Fragment, { children: _jsxs("div", { ref: wrapperRef, className: cn(s['w-full'], s['relative']), children: [_jsxs("div", { className: cn(s['flex'], s['items-center'], s['leading-4'], s['p-2'], s['focus:outline-none'], s['focus:ring'], s['w-full'], s['shadow-sm'], s['sm:text-base'], s['border'], s['rounded-md'], {
|
|
209
|
+
return (_jsx(_Fragment, { children: _jsxs("div", { ref: wrapperRef, className: cn(s['w-full'], s['relative'], className), style: style, children: [_jsxs("div", { className: cn(s['flex'], s['items-center'], s['leading-4'], s['p-2'], s['focus:outline-none'], s['focus:ring'], s['w-full'], s['shadow-sm'], s['sm:text-base'], s['border'], s['rounded-md'], {
|
|
120
210
|
[s['border-red']]: hasError,
|
|
121
211
|
[s['border-gray-300']]: !hasError,
|
|
122
212
|
}), children: [_jsx("input", { placeholder: placeholder, disabled: disable, name: name, value: !isListOpen
|
|
123
|
-
?
|
|
124
|
-
?
|
|
125
|
-
:
|
|
213
|
+
? selectedItems.length > 0
|
|
214
|
+
? getSelectedPlaceholder()
|
|
215
|
+
: placeholder
|
|
126
216
|
: isUpperCase
|
|
127
217
|
? value?.toUpperCase()
|
|
128
|
-
: value, className: cn(s['w-full'], s['focus:outline-none'], s['bg-none']), onKeyUp: onKeyUp, onChange: onChange, onClick: () => setIsListOpen(true), onBlur: (e) => onBlur && onBlur(e), id: `${
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
218
|
+
: value, className: cn(s['w-full'], s['focus:outline-none'], s['bg-none']), onKeyUp: onKeyUp, onChange: onChange, onClick: () => setIsListOpen(true), onBlur: (e) => onBlur && onBlur(e), id: componentKey ? `${componentKey}_input_text` : undefined }, componentKey ? `${componentKey}_input` : undefined), loader && _jsx(LoadingAnimateSpin, {}), isListOpen ? (_jsx(Icon, { nameIcon: "FaChevronUp", propsIcon: { size: 16 } })) : (_jsx(Icon, { nameIcon: "FaChevronDown", propsIcon: { size: 16 } }))] }), options && isListOpen && (_jsxs("div", { className: cn(s['flex'], s['flex-col'], s['absolute'], s['rounded-sm'], s['z-500'], s['w-full']), style: { zIndex }, children: [showSelectedSection && selectedItems.length > 0 && (_jsx("div", { className: cn(s['flex'], s['w-full'], s['bg-gray-400']), children: dragDropEnabled ? (_jsx(DndContext, { sensors: sensors, collisionDetection: closestCenter, onDragEnd: onDragEnd, children: _jsx(SortableContext, { items: selectedItems.map((item, idx) => item.sort || item[uniqueField] || idx.toString()), strategy: strategy, children: _jsx("div", { className: cn(s['flex'], s['flex-wrap'], s['gap-1'], s['bg-gray-400'], s['p-1']), children: selectedItems.map((item, index) => (_jsx(DraggableSelectedItem, { item: item, index: index, onRemove: handleRemoveItem, displayKey: data.displayKey, uniqueField: "sort", displayConfig: displayConfig }, item.sort || item[uniqueField] || index))) }) }) })) : (_jsx("div", { className: cn(s['flex'], s['flex-wrap'], s['gap-1'], s['bg-gray-400'], s['p-1']), children: selectedItems.map((item, index) => (_jsx(DraggableSelectedItem, { item: item, index: index, onRemove: handleRemoveItem, displayKey: data.displayKey, uniqueField: uniqueField, displayConfig: displayConfig }, item[uniqueField] || index))) })) })), options.length > 0 ? (_jsx("ul", { className: cn(s['flex'], s['flex-col'], s['gap-1'], s['bg-gray-200'], s['p-2'], s['overflow-y-scroll'], s['w-full']), id: componentKey ? `${componentKey}_listView` : undefined, style: { maxHeight }, children: options.map((item, index) => (_jsx("li", { className: cn(s['flex'], s['gap-4'], s['p-1']), children: _jsxs("label", { className: cn(s['flex'], s['items-center']), children: [_jsx("input", { className: cn(s['flex'], s['h-4'], s['w-4']), type: "checkbox", checked: item.selected || false, onChange: () => handleSelectItem(item), disabled: maxSelection
|
|
219
|
+
? selectedItems.length >= maxSelection &&
|
|
220
|
+
!item.selected
|
|
221
|
+
: false, id: componentKey
|
|
222
|
+
? `${componentKey}_${index}_check_box_view`
|
|
223
|
+
: undefined }, componentKey
|
|
224
|
+
? `${componentKey}_${index}_check_box_view`
|
|
225
|
+
: undefined), _jsx("span", { className: cn(s['flex'], s['ml-2']), children: displayConfig.renderItem
|
|
226
|
+
? displayConfig.renderItem(item)
|
|
227
|
+
: getItemDisplayText(item) })] }) }, `${componentKey || 'item'}_${index}_list`))) }, componentKey ? `${componentKey}_listView` : undefined)) : (_jsx("div", { className: cn(s['p-4'], s['text-center'], s['text-gray-500']), children: _jsx("p", { className: cn(s['text-sm']), children: emptyStateMessage }) }))] }, componentKey ? `${componentKey}_list_wrapper_view` : undefined))] }, componentKey ? `${componentKey}_wrapperView` : undefined) }));
|
|
134
228
|
};
|
|
@@ -1,8 +1,106 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
import React from 'react';
|
|
2
|
+
/** Option data structure */
|
|
3
|
+
export interface AutocompleteOption {
|
|
4
|
+
/** Display value */
|
|
5
|
+
label: string;
|
|
6
|
+
/** Unique identifier */
|
|
7
|
+
value: string | number;
|
|
8
|
+
/** Additional data */
|
|
9
|
+
[key: string]: any;
|
|
5
10
|
}
|
|
6
|
-
|
|
7
|
-
export {
|
|
11
|
+
/** Filter configuration */
|
|
12
|
+
export interface AutocompleteFilterConfig {
|
|
13
|
+
/** Enable filtering */
|
|
14
|
+
enabled?: boolean;
|
|
15
|
+
/** Case sensitive filtering */
|
|
16
|
+
caseSensitive?: boolean;
|
|
17
|
+
/** Custom filter function */
|
|
18
|
+
filterFn?: (option: string | AutocompleteOption, searchValue: string) => boolean;
|
|
19
|
+
/** Minimum characters to trigger filter */
|
|
20
|
+
minCharacters?: number;
|
|
21
|
+
}
|
|
22
|
+
/** Display configuration */
|
|
23
|
+
export interface AutocompleteDisplayConfig {
|
|
24
|
+
/** Custom render function for option */
|
|
25
|
+
renderOption?: (option: string | AutocompleteOption, index: number, isActive: boolean) => React.ReactNode;
|
|
26
|
+
/** Custom render function for empty state */
|
|
27
|
+
renderEmptyState?: () => React.ReactNode;
|
|
28
|
+
/** Highlight active option */
|
|
29
|
+
highlightActive?: boolean;
|
|
30
|
+
/** Active option class names */
|
|
31
|
+
activeOptionClassName?: string;
|
|
32
|
+
/** Option class names */
|
|
33
|
+
optionClassName?: string;
|
|
34
|
+
}
|
|
35
|
+
/** Keyboard navigation configuration */
|
|
36
|
+
export interface AutocompleteKeyboardConfig {
|
|
37
|
+
/** Enable keyboard navigation */
|
|
38
|
+
enabled?: boolean;
|
|
39
|
+
/** Keys that trigger selection */
|
|
40
|
+
selectKeys?: string[];
|
|
41
|
+
/** Keys that close the dropdown */
|
|
42
|
+
closeKeys?: string[];
|
|
43
|
+
/** Enable Enter key to select */
|
|
44
|
+
enterToSelect?: boolean;
|
|
45
|
+
/** Enable Escape key to close */
|
|
46
|
+
escapeToClose?: boolean;
|
|
47
|
+
}
|
|
48
|
+
/** UI Configuration */
|
|
49
|
+
export interface AutocompleteUIConfig {
|
|
50
|
+
/** Input placeholder */
|
|
51
|
+
placeholder?: string;
|
|
52
|
+
/** Empty state message */
|
|
53
|
+
emptyStateMessage?: string;
|
|
54
|
+
/** List item height in pixels */
|
|
55
|
+
itemHeight?: number;
|
|
56
|
+
/** Maximum height for dropdown */
|
|
57
|
+
maxHeight?: string;
|
|
58
|
+
/** Z-index for dropdown */
|
|
59
|
+
zIndex?: number;
|
|
60
|
+
/** Show dropdown on focus */
|
|
61
|
+
showOnFocus?: boolean;
|
|
62
|
+
/** Show dropdown on click */
|
|
63
|
+
showOnClick?: boolean;
|
|
64
|
+
/** Auto-select first option */
|
|
65
|
+
autoSelectFirst?: boolean;
|
|
66
|
+
}
|
|
67
|
+
export interface AutocompleteProps {
|
|
68
|
+
/** Current value */
|
|
69
|
+
value?: string;
|
|
70
|
+
/** Callback when value changes */
|
|
71
|
+
onValueChange: (value: string | AutocompleteOption) => void;
|
|
72
|
+
/** Options - can be strings or AutocompleteOption objects */
|
|
73
|
+
options?: (string | AutocompleteOption)[];
|
|
74
|
+
/** Filter configuration */
|
|
75
|
+
filterConfig?: AutocompleteFilterConfig;
|
|
76
|
+
/** Display configuration */
|
|
77
|
+
displayConfig?: AutocompleteDisplayConfig;
|
|
78
|
+
/** Keyboard configuration */
|
|
79
|
+
keyboardConfig?: AutocompleteKeyboardConfig;
|
|
80
|
+
/** UI configuration */
|
|
81
|
+
uiConfig?: AutocompleteUIConfig;
|
|
82
|
+
/** Error state */
|
|
83
|
+
hasError?: boolean;
|
|
84
|
+
/** Disabled state */
|
|
85
|
+
disabled?: boolean;
|
|
86
|
+
/** Input name attribute */
|
|
87
|
+
name?: string;
|
|
88
|
+
/** Additional className */
|
|
89
|
+
className?: string;
|
|
90
|
+
/** Custom styles */
|
|
91
|
+
style?: React.CSSProperties;
|
|
92
|
+
/** Input className */
|
|
93
|
+
inputClassName?: string;
|
|
94
|
+
/** Callback when input value changes (receives the string value) */
|
|
95
|
+
onInputValueChange?: (value: string) => void;
|
|
96
|
+
/** Callback when dropdown opens */
|
|
97
|
+
onOpen?: () => void;
|
|
98
|
+
/** Callback when dropdown closes */
|
|
99
|
+
onClose?: () => void;
|
|
100
|
+
/** Callback when option is selected */
|
|
101
|
+
onSelect?: (option: string | AutocompleteOption) => void;
|
|
102
|
+
/** Auto-focus input on mount */
|
|
103
|
+
autoFocus?: boolean;
|
|
104
|
+
}
|
|
105
|
+
export declare const Autocomplete: ({ value, onValueChange, options, filterConfig, displayConfig, keyboardConfig, uiConfig, hasError, disabled, name, className, style, inputClassName, onInputValueChange, onOpen, onClose, onSelect, autoFocus, }: AutocompleteProps) => import("react/jsx-runtime").JSX.Element;
|
|
8
106
|
//# sourceMappingURL=autocomplete.d.ts.map
|
package/lib/src/core-components/src/components/AutoComplete/autocomplete/autocomplete.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"autocomplete.d.ts","sourceRoot":"","sources":["../../../../../../../src/core-components/src/components/AutoComplete/autocomplete/autocomplete.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"autocomplete.d.ts","sourceRoot":"","sources":["../../../../../../../src/core-components/src/components/AutoComplete/autocomplete/autocomplete.tsx"],"names":[],"mappings":"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"}
|