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.
Files changed (35) hide show
  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.d.ts +100 -12
  2. 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
  3. 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
  4. 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
  5. 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
  6. 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
  7. package/lib/src/core-components/src/components/AutoComplete/autocomplete/autocomplete.d.ts +104 -6
  8. package/lib/src/core-components/src/components/AutoComplete/autocomplete/autocomplete.d.ts.map +1 -1
  9. package/lib/src/core-components/src/components/AutoComplete/autocomplete/autocomplete.js +261 -71
  10. package/lib/src/core-components/src/components/Loader/loader.component.d.ts +13 -1
  11. package/lib/src/core-components/src/components/Loader/loader.component.d.ts.map +1 -1
  12. package/lib/src/core-components/src/components/Loader/loader.component.js +121 -3
  13. package/lib/src/core-components/src/components/check-box/checkBox.component.d.ts.map +1 -1
  14. package/lib/src/core-components/src/components/check-box/checkBox.component.js +2 -2
  15. package/lib/src/core-components/src/components/date-picker/date-picker.component.js +2 -2
  16. package/lib/src/core-components/src/components/radio/radio.component.js +2 -2
  17. package/lib/src/core-components/src/components/stepper/stepper.component.d.ts +54 -6
  18. package/lib/src/core-components/src/components/stepper/stepper.component.d.ts.map +1 -1
  19. package/lib/src/core-components/src/components/stepper/stepper.component.js +127 -19
  20. package/lib/src/core-components/src/components/timer/timer.component.js +2 -2
  21. package/lib/src/core-components/src/tc.global.css +7 -1
  22. package/lib/src/core-components/src/tc.module.css +3 -1036
  23. package/package.json +1 -1
  24. package/lib/src/core-components/src/library/assets/svg/CheckedBox.svg +0 -14
  25. package/lib/src/core-components/src/library/assets/svg/DownArrow.svg +0 -14
  26. package/lib/src/core-components/src/library/assets/svg/UnCheckbox.svg +0 -3
  27. package/lib/src/core-components/src/library/assets/svg/UpArrow.svg +0 -14
  28. package/lib/src/core-components/src/library/assets/svg/checkedRadio.svg +0 -13
  29. package/lib/src/core-components/src/library/assets/svg/datePicker.svg +0 -3
  30. package/lib/src/core-components/src/library/assets/svg/index.d.ts +0 -10
  31. package/lib/src/core-components/src/library/assets/svg/index.d.ts.map +0 -1
  32. package/lib/src/core-components/src/library/assets/svg/index.js +0 -28
  33. package/lib/src/core-components/src/library/assets/svg/timer copy.svg +0 -3
  34. package/lib/src/core-components/src/library/assets/svg/timer.svg +0 -3
  35. 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
- 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']), children: [_jsx("div", { className: cn(s['flex'], s['w-fit'], s['cursor-pointer'], s['items-center']), onClick: (e) => {
18
- e.stopPropagation();
19
- onRemove(index);
20
- }, children: _jsx(Icon, { nameIcon: "BsTrashFill", propsIcon: { size: 16, color: 'white' } }) }), _jsx("span", { children: displayKey?.map((key) => `${item[key]}`).join(' - ') })] }));
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 = ({ key, uniqueField = '_id', loader = false, placeholder = 'Search...', data, hasError = false, disable = false, isUpperCase = false, name, defaultValue = '', onFilter, onUpdate, onSelect, onBlur, }) => {
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 && !ref.current.contains(event.target) && isListOpen) {
38
- onUpdate && onUpdate(refSelectedItems.current);
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
- const finalList = list?.filter((item, index) => {
53
- item.selected = false;
54
- selectedItem && selectedItem?.length > 0
55
- ? selectedItem?.find((sItem, index) => {
56
- if (sItem[uniqueField] === item[uniqueField]) {
57
- item.selected = true;
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
- setOriginalOptions(getSelectedItem(data?.selected, data?.list));
68
- setOptions(getSelectedItem(data?.selected, data?.list));
69
- // Update both ref and state
70
- const itemsWithSort = data?.selected?.map((sItem, index) => ({
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?.toString(),
73
- })) || [];
105
+ sort: index.toString(),
106
+ }));
74
107
  refSelectedItems.current = itemsWithSort;
75
- setSelectedItems(itemsWithSort); // Add this line
76
- }, [data, data?.selected]);
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
- onFilter && onFilter(search);
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.target.value;
86
- onFilter && onFilter(search);
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 !== over?.id) {
92
- const oldIndex = refSelectedItems.current.findIndex((item) => item.sort === active.id);
93
- const newIndex = refSelectedItems.current.findIndex((item) => item.sort === over.id);
94
- if (oldIndex !== -1 && newIndex !== -1) {
95
- const reorderedItems = arrayMove(refSelectedItems.current, oldIndex, newIndex);
96
- // Update sort values to maintain proper order
97
- const updatedItems = reorderedItems?.map((item, index) => ({
98
- ...item,
99
- sort: index.toString(),
100
- }));
101
- // Update both ref and state to trigger re-render
102
- refSelectedItems.current = updatedItems;
103
- setSelectedItems([...updatedItems]);
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?.map((item, idx) => ({
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
- ? data?.selected?.length > 0
124
- ? `${(data?.selected && data?.selected?.length) || 0} Items`
125
- : value
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: `${key}_input_text` }, `${key}_input`), loader && _jsx(LoadingAnimateSpin, {}), isListOpen ? (_jsx(Icon, { nameIcon: "FaChevronUp", propsIcon: { size: 16 } })) : (_jsx(Icon, { nameIcon: "FaChevronDown", propsIcon: { size: 16 } }))] }), options && isListOpen
129
- ? options?.length > 0 && (_jsxs("div", { className: cn(s['flex'], s['flex-col'], s['absolute'], s['rounded-sm'], s['z-500'], s['w-full']), style: { zIndex: 80 }, children: [_jsx("div", { className: cn(s['flex'], s['w-full'], s['bg-gray-400']), children: _jsx(DndContext, { sensors: sensors, collisionDetection: closestCenter, onDragEnd: onDragEnd, children: selectedItems?.length > 0 && (_jsx(SortableContext, { items: selectedItems.map((item) => item.sort), strategy: horizontalListSortingStrategy, 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" }, item.sort))) }) })) }) }), _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: `${key}_listView`, style: { maxHeight: 'calc(100vh - 20vh)' }, children: options?.map((item, index) => (_jsx(_Fragment, { children: _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, onChange: () => onSelect(item), id: `${key}_${index}_check_box_view` }, `${key}_${index}_check_box_view`), ' ', _jsx("span", { className: cn(s['flex'], s['ml-2']), children: data.displayKey
130
- .map((key) => `${item[key]}
131
- `)
132
- .join(' - ') })] }) }, `${key}_${index}_list`) }))) }, `${key}_listView`)] }, `${key}_list_wrapper_view`))
133
- : null] }, `${key}_wrapperView`) }));
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
- interface AutocompleteProps {
2
- value: string;
3
- onValueChange: (value: string) => void;
4
- options?: string[];
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
- export declare const Autocomplete: ({ value, onValueChange, options, }: AutocompleteProps) => import("react/jsx-runtime").JSX.Element;
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
@@ -1 +1 @@
1
- {"version":3,"file":"autocomplete.d.ts","sourceRoot":"","sources":["../../../../../../../src/core-components/src/components/AutoComplete/autocomplete/autocomplete.tsx"],"names":[],"mappings":"AAMA,UAAU,iBAAiB;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,eAAO,MAAM,YAAY,uCAItB,iBAAiB,4CAgNnB,CAAC"}
1
+ {"version":3,"file":"autocomplete.d.ts","sourceRoot":"","sources":["../../../../../../../src/core-components/src/components/AutoComplete/autocomplete/autocomplete.tsx"],"names":[],"mappings":"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"}