@coreui/react-pro 5.17.1 → 5.19.0

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 (101) hide show
  1. package/README.md +1 -1
  2. package/dist/cjs/components/autocomplete/CAutocomplete.d.ts +243 -0
  3. package/dist/cjs/components/autocomplete/CAutocomplete.js +306 -0
  4. package/dist/cjs/components/autocomplete/CAutocomplete.js.map +1 -0
  5. package/dist/cjs/components/autocomplete/CAutocompleteOptions.d.ts +17 -0
  6. package/dist/cjs/components/autocomplete/CAutocompleteOptions.js +72 -0
  7. package/dist/cjs/components/autocomplete/CAutocompleteOptions.js.map +1 -0
  8. package/dist/cjs/components/autocomplete/index.d.ts +2 -0
  9. package/dist/cjs/components/autocomplete/types.d.ts +18 -0
  10. package/dist/cjs/components/autocomplete/utils.d.ts +11 -0
  11. package/dist/cjs/components/autocomplete/utils.js +107 -0
  12. package/dist/cjs/components/autocomplete/utils.js.map +1 -0
  13. package/dist/cjs/components/calendar/CCalendarPanel.js +6 -7
  14. package/dist/cjs/components/calendar/CCalendarPanel.js.map +1 -1
  15. package/dist/cjs/components/calendar/utils.d.ts +19 -5
  16. package/dist/cjs/components/calendar/utils.js +20 -9
  17. package/dist/cjs/components/calendar/utils.js.map +1 -1
  18. package/dist/cjs/components/date-range-picker/CDateRangePicker.js +10 -8
  19. package/dist/cjs/components/date-range-picker/CDateRangePicker.js.map +1 -1
  20. package/dist/cjs/components/index.d.ts +1 -0
  21. package/dist/cjs/components/multi-select/CMultiSelect.d.ts +6 -0
  22. package/dist/cjs/components/multi-select/CMultiSelect.js +13 -12
  23. package/dist/cjs/components/multi-select/CMultiSelect.js.map +1 -1
  24. package/dist/cjs/components/multi-select/CMultiSelectOptions.js +6 -5
  25. package/dist/cjs/components/multi-select/CMultiSelectOptions.js.map +1 -1
  26. package/dist/cjs/components/multi-select/CMultiSelectSelection.js +1 -1
  27. package/dist/cjs/components/multi-select/CMultiSelectSelection.js.map +1 -1
  28. package/dist/cjs/components/multi-select/utils.d.ts +0 -2
  29. package/dist/cjs/components/multi-select/utils.js +0 -26
  30. package/dist/cjs/components/multi-select/utils.js.map +1 -1
  31. package/dist/cjs/components/time-picker/CTimePicker.js +15 -1
  32. package/dist/cjs/components/time-picker/CTimePicker.js.map +1 -1
  33. package/dist/cjs/index.js +2 -0
  34. package/dist/cjs/index.js.map +1 -1
  35. package/dist/cjs/utils/getNextSibling.d.ts +2 -0
  36. package/dist/cjs/utils/getNextSibling.js +23 -0
  37. package/dist/cjs/utils/getNextSibling.js.map +1 -0
  38. package/dist/cjs/utils/getPreviousSibling.d.ts +2 -0
  39. package/dist/cjs/utils/getPreviousSibling.js +22 -0
  40. package/dist/cjs/utils/getPreviousSibling.js.map +1 -0
  41. package/dist/cjs/utils/index.d.ts +3 -1
  42. package/dist/esm/components/autocomplete/CAutocomplete.d.ts +243 -0
  43. package/dist/esm/components/autocomplete/CAutocomplete.js +304 -0
  44. package/dist/esm/components/autocomplete/CAutocomplete.js.map +1 -0
  45. package/dist/esm/components/autocomplete/CAutocompleteOptions.d.ts +17 -0
  46. package/dist/esm/components/autocomplete/CAutocompleteOptions.js +70 -0
  47. package/dist/esm/components/autocomplete/CAutocompleteOptions.js.map +1 -0
  48. package/dist/esm/components/autocomplete/index.d.ts +2 -0
  49. package/dist/esm/components/autocomplete/types.d.ts +18 -0
  50. package/dist/esm/components/autocomplete/utils.d.ts +11 -0
  51. package/dist/esm/components/autocomplete/utils.js +96 -0
  52. package/dist/esm/components/autocomplete/utils.js.map +1 -0
  53. package/dist/esm/components/calendar/CCalendarPanel.js +7 -8
  54. package/dist/esm/components/calendar/CCalendarPanel.js.map +1 -1
  55. package/dist/esm/components/calendar/utils.d.ts +19 -5
  56. package/dist/esm/components/calendar/utils.js +20 -9
  57. package/dist/esm/components/calendar/utils.js.map +1 -1
  58. package/dist/esm/components/date-range-picker/CDateRangePicker.js +10 -8
  59. package/dist/esm/components/date-range-picker/CDateRangePicker.js.map +1 -1
  60. package/dist/esm/components/index.d.ts +1 -0
  61. package/dist/esm/components/multi-select/CMultiSelect.d.ts +6 -0
  62. package/dist/esm/components/multi-select/CMultiSelect.js +14 -13
  63. package/dist/esm/components/multi-select/CMultiSelect.js.map +1 -1
  64. package/dist/esm/components/multi-select/CMultiSelectOptions.js +4 -3
  65. package/dist/esm/components/multi-select/CMultiSelectOptions.js.map +1 -1
  66. package/dist/esm/components/multi-select/CMultiSelectSelection.js +1 -1
  67. package/dist/esm/components/multi-select/CMultiSelectSelection.js.map +1 -1
  68. package/dist/esm/components/multi-select/utils.d.ts +0 -2
  69. package/dist/esm/components/multi-select/utils.js +1 -25
  70. package/dist/esm/components/multi-select/utils.js.map +1 -1
  71. package/dist/esm/components/time-picker/CTimePicker.js +15 -1
  72. package/dist/esm/components/time-picker/CTimePicker.js.map +1 -1
  73. package/dist/esm/index.js +1 -0
  74. package/dist/esm/index.js.map +1 -1
  75. package/dist/esm/utils/getNextSibling.d.ts +2 -0
  76. package/dist/esm/utils/getNextSibling.js +18 -0
  77. package/dist/esm/utils/getNextSibling.js.map +1 -0
  78. package/dist/esm/utils/getPreviousSibling.d.ts +2 -0
  79. package/dist/esm/utils/getPreviousSibling.js +18 -0
  80. package/dist/esm/utils/getPreviousSibling.js.map +1 -0
  81. package/dist/esm/utils/index.d.ts +3 -1
  82. package/package.json +10 -10
  83. package/src/components/autocomplete/CAutocomplete.tsx +846 -0
  84. package/src/components/autocomplete/CAutocompleteOptions.tsx +165 -0
  85. package/src/components/autocomplete/__tests__/CAutocomplete.spec.tsx +244 -0
  86. package/src/components/autocomplete/__tests__/CAutocompleteOptions.spec.tsx +210 -0
  87. package/src/components/autocomplete/index.ts +3 -0
  88. package/src/components/autocomplete/types.ts +25 -0
  89. package/src/components/autocomplete/utils.ts +125 -0
  90. package/src/components/calendar/CCalendarPanel.tsx +5 -15
  91. package/src/components/calendar/utils.ts +24 -10
  92. package/src/components/date-range-picker/CDateRangePicker.tsx +11 -7
  93. package/src/components/index.ts +1 -0
  94. package/src/components/multi-select/CMultiSelect.tsx +23 -4
  95. package/src/components/multi-select/CMultiSelectOptions.tsx +8 -5
  96. package/src/components/multi-select/CMultiSelectSelection.tsx +3 -3
  97. package/src/components/multi-select/utils.ts +0 -34
  98. package/src/components/time-picker/CTimePicker.tsx +14 -4
  99. package/src/utils/getNextSibling.ts +18 -0
  100. package/src/utils/getPreviousSibling.ts +18 -0
  101. package/src/utils/index.ts +4 -0
@@ -0,0 +1,243 @@
1
+ import React, { HTMLAttributes, ReactNode } from 'react';
2
+ import { CFormControlWrapperProps } from '../form/CFormControlWrapper';
3
+ import type { Option, OptionsGroup, Search } from './types';
4
+ export interface CAutocompleteProps extends Omit<CFormControlWrapperProps, 'floatingClassName' | 'floatingLabel'>, Omit<HTMLAttributes<HTMLDivElement>, 'onChange' | 'onInput'> {
5
+ /**
6
+ * Only allow selection of predefined options.
7
+ * When `true`, users cannot enter custom values that are not in the options list.
8
+ * When `false`, users can enter and select custom values.
9
+ *
10
+ * @default false
11
+ */
12
+ allowOnlyDefinedOptions?: boolean;
13
+ /**
14
+ * A string of all className you want applied to the base component.
15
+ * These classes will be merged with the default React autocomplete classes.
16
+ */
17
+ className?: string;
18
+ /**
19
+ * Enables selection cleaner element.
20
+ * When `true`, displays a clear button that allows users to reset the selection.
21
+ * The cleaner button is only shown when there is a selection and the component is not disabled or read-only.
22
+ *
23
+ * @default false
24
+ */
25
+ cleaner?: boolean;
26
+ /**
27
+ * Whether to clear the internal search state after selecting an option.
28
+ *
29
+ * When set to `true`, the internal search value used for filtering options is cleared
30
+ * after a selection is made. This affects only the component's internal logic.
31
+ *
32
+ * Note: This does **not** clear the visible input field if the component is using external search
33
+ * or is controlled via the `searchValue` prop. In such cases, clearing must be handled externally.
34
+ *
35
+ * @default true
36
+ */
37
+ clearSearchOnSelect?: boolean;
38
+ /**
39
+ * Specifies the DOM element where the dropdown should be rendered when using portal mode.
40
+ * Can be a DOM element reference, DocumentFragment, function that returns an element or null,
41
+ * or null (renders to document body). Works in conjunction with the `portal` prop to control
42
+ * where the portal content is mounted in the DOM tree.
43
+ */
44
+ container?: DocumentFragment | Element | (() => DocumentFragment | Element | null) | null;
45
+ /**
46
+ * Toggle the disabled state for the component.
47
+ * When `true`, the React.js autocomplete is non-interactive and appears visually disabled.
48
+ * Users cannot type, select options, or trigger the dropdown.
49
+ */
50
+ disabled?: boolean;
51
+ /**
52
+ * Highlight options that match the search criteria.
53
+ * When `true`, matching portions of option labels are visually highlighted
54
+ * based on the current search input value.
55
+ *
56
+ * @default false
57
+ */
58
+ highlightOptionsOnSearch?: boolean;
59
+ /**
60
+ * Set the id attribute for the native input element.
61
+ * This id is used for accessibility purposes and form associations.
62
+ * If not provided, a unique id may be generated automatically.
63
+ */
64
+ id?: string;
65
+ /**
66
+ * Show dropdown indicator/arrow button.
67
+ * When `true`, displays a dropdown arrow button that can be clicked
68
+ * to manually show or hide the options dropdown.
69
+ */
70
+ indicator?: boolean;
71
+ /**
72
+ * When set, the options list will have a loading style: loading spinner and reduced opacity.
73
+ * Use this to indicate that options are being fetched asynchronously.
74
+ * The dropdown remains functional but shows visual loading indicators.
75
+ */
76
+ loading?: boolean;
77
+ /**
78
+ * The name attribute for the input element.
79
+ * Used for form submission and identification in form data.
80
+ * Important for proper form handling and accessibility.
81
+ */
82
+ name?: string;
83
+ /**
84
+ * Execute a function when a user changes the selected option.
85
+ * Called with the selected option object or `undefined` when cleared.
86
+ * This is the primary callback for handling selection changes.
87
+ *
88
+ * @param option - The selected option object, or `undefined` if cleared
89
+ */
90
+ onChange?: (option: Option | null) => void;
91
+ /**
92
+ * Execute a function when the filter/search value changes.
93
+ * Called whenever the user types in the search input.
94
+ * Useful for implementing external search functionality or analytics.
95
+ *
96
+ * @param value - The current search input value
97
+ */
98
+ onInput?: (value: string) => void;
99
+ /**
100
+ * The callback is fired when the dropdown requests to be hidden.
101
+ * Called when the dropdown closes due to user interaction, clicks outside,
102
+ * escape key, or programmatic changes.
103
+ */
104
+ onHide?: () => void;
105
+ /**
106
+ * The callback is fired when the dropdown requests to be shown.
107
+ * Called when the dropdown opens due to user interaction, focus,
108
+ * or programmatic changes.
109
+ */
110
+ onShow?: () => void;
111
+ /**
112
+ * List of option elements.
113
+ * Can contain Option objects, OptionsGroup objects, or plain strings.
114
+ * Plain strings are converted to simple Option objects internally.
115
+ * This is a required prop - the React autocomplete needs options to function.
116
+ */
117
+ options: (Option | OptionsGroup | string)[];
118
+ /**
119
+ * Sets maxHeight of options list.
120
+ * Controls the maximum height of the dropdown options container.
121
+ * Can be a number (pixels) or a CSS length string (e.g., '200px', '10rem').
122
+ * When content exceeds this height, a scrollbar will appear.
123
+ *
124
+ * @default 'auto'
125
+ */
126
+ optionsMaxHeight?: number | string;
127
+ /**
128
+ * Custom template for rendering individual options.
129
+ * Allows complete customization of how each option appears in the dropdown.
130
+ * The function receives an Option object and should return a ReactNode.
131
+ *
132
+ * @param option - The option object to render
133
+ * @returns ReactNode to display for this option
134
+ */
135
+ optionsTemplate?: (option: Option) => ReactNode;
136
+ /**
137
+ * Custom template for rendering option groups.
138
+ * Allows customization of how option group headers appear in the dropdown.
139
+ * The function receives an OptionsGroup object and should return a ReactNode.
140
+ *
141
+ * @param option - The options group object to render
142
+ * @returns ReactNode to display for this group header
143
+ */
144
+ optionsGroupsTemplate?: (option: OptionsGroup) => ReactNode;
145
+ /**
146
+ * Specifies a short hint that is visible in the search input.
147
+ * Displayed when the input is empty to guide user interaction.
148
+ * Standard HTML input placeholder behavior.
149
+ */
150
+ placeholder?: string;
151
+ /**
152
+ * Renders the autocomplete dropdown in a React portal, allowing it to break out of its
153
+ * parent container's styling constraints (like overflow, z-index, or positioning).
154
+ * When enabled, the dropdown is rendered at the document root level, ensuring it appears
155
+ * above other page elements and isn't clipped by parent containers.
156
+ *
157
+ * @default false
158
+ */
159
+ portal?: boolean;
160
+ /**
161
+ * Toggle the readonly state for the component.
162
+ * When `true`, users can view and interact with the dropdown but cannot
163
+ * type in the search input or modify the selection through typing.
164
+ * Selection via clicking options may still be possible.
165
+ */
166
+ readOnly?: boolean;
167
+ /**
168
+ * When it is present, it indicates that the user must choose a value before submitting the form.
169
+ * Adds HTML5 form validation requirement. The form will not submit
170
+ * until a valid selection is made.
171
+ */
172
+ required?: boolean;
173
+ /**
174
+ * Determines whether the selected options should be cleared when the options list is updated.
175
+ * When `true`, any previously selected options will be reset whenever the options
176
+ * list undergoes a change. This ensures that outdated selections are not retained
177
+ * when new options are provided.
178
+ *
179
+ * @default false
180
+ */
181
+ resetSelectionOnOptionsChange?: boolean;
182
+ /**
183
+ * Enables and configures search functionality.
184
+ * - `'external'`: Search is handled externally, filtering is not applied internally
185
+ * - `'global'`: Enables global keyboard search when dropdown is closed
186
+ * - Object with `external` and `global` boolean properties for fine-grained control
187
+ */
188
+ search?: Search;
189
+ /**
190
+ * Sets the label for no results when filtering.
191
+ * - `false`: Don't show any message when no results found
192
+ * - `true`: Show default "No results found" message
193
+ * - `string`: Show custom text message
194
+ * - `ReactNode`: Show custom component/element
195
+ *
196
+ * @default false
197
+ */
198
+ searchNoResultsLabel?: boolean | string | ReactNode;
199
+ /**
200
+ * Show hint options based on the current input value.
201
+ * When `true`, displays a preview/hint of the first matching option
202
+ * as semi-transparent text in the input field, similar to browser autocomplete.
203
+ *
204
+ * @default false
205
+ */
206
+ showHints?: boolean;
207
+ /**
208
+ * Size the component small or large.
209
+ * - `'sm'`: Small size variant
210
+ * - `'lg'`: Large size variant
211
+ * - `undefined`: Default/medium size
212
+ */
213
+ size?: 'sm' | 'lg';
214
+ /**
215
+ * Sets the initially selected value for the React.js autocomplete component.
216
+ * Can be a string (matched against option labels) or number (matched against option values).
217
+ * The component will attempt to find and select the matching option on mount.
218
+ */
219
+ value?: number | string;
220
+ /**
221
+ * Enable virtual scroller for the options list.
222
+ * When `true`, only visible options are rendered in the DOM for better performance
223
+ * with large option lists. Works in conjunction with `visibleItems` prop.
224
+ *
225
+ * @default false
226
+ */
227
+ virtualScroller?: boolean;
228
+ /**
229
+ * Toggle the visibility of autocomplete dropdown.
230
+ * Controls whether the dropdown is initially visible.
231
+ * The dropdown visibility can still be toggled through user interaction.
232
+ */
233
+ visible?: boolean;
234
+ /**
235
+ * Amount of visible items when virtualScroller is enabled.
236
+ * Determines how many option items are rendered at once when virtual scrolling is active.
237
+ * Higher values show more items but use more memory. Lower values improve performance.
238
+ *
239
+ * @default 10
240
+ */
241
+ visibleItems?: number;
242
+ }
243
+ export declare const CAutocomplete: React.ForwardRefExoticComponent<CAutocompleteProps & React.RefAttributes<HTMLDivElement>>;
@@ -0,0 +1,304 @@
1
+ import { __rest, __assign } from '../../node_modules/tslib/tslib.es6.js';
2
+ import React, { forwardRef, useRef, useId, useState, useMemo, useEffect, useCallback } from 'react';
3
+ import classNames from '../../_virtual/index.js';
4
+ import PropTypes from 'prop-types';
5
+ import { CConditionalPortal } from '../conditional-portal/CConditionalPortal.js';
6
+ import { CFormControlWrapper } from '../form/CFormControlWrapper.js';
7
+ import { CAutocompleteOptions } from './CAutocompleteOptions.js';
8
+ import { usePopper } from '../../hooks/usePopper.js';
9
+ import isRTL from '../../utils/isRTL.js';
10
+ import { useForkedRef } from '../../hooks/useForkedRef.js';
11
+ import { filterOptions, isExternalSearch, getFirstOptionByValue, flattenOptionsArray, getOptionLabel, isGlobalSearch, getFirstOptionByLabel } from './utils.js';
12
+
13
+ var CAutocomplete = forwardRef(function (_a, ref) {
14
+ var _b;
15
+ var _c = _a.allowOnlyDefinedOptions, allowOnlyDefinedOptions = _c === void 0 ? false : _c, className = _a.className, _d = _a.cleaner, cleaner = _d === void 0 ? false : _d, _e = _a.clearSearchOnSelect, clearSearchOnSelect = _e === void 0 ? true : _e, container = _a.container, disabled = _a.disabled, feedback = _a.feedback, feedbackInvalid = _a.feedbackInvalid, feedbackValid = _a.feedbackValid, _f = _a.highlightOptionsOnSearch, highlightOptionsOnSearch = _f === void 0 ? false : _f, id = _a.id, indicator = _a.indicator, invalid = _a.invalid, label = _a.label, loading = _a.loading, name = _a.name, onChange = _a.onChange, onHide = _a.onHide, onInput = _a.onInput, onShow = _a.onShow, options = _a.options, _g = _a.optionsMaxHeight, optionsMaxHeight = _g === void 0 ? 'auto' : _g, optionsTemplate = _a.optionsTemplate, optionsGroupsTemplate = _a.optionsGroupsTemplate, placeholder = _a.placeholder, _h = _a.portal, portal = _h === void 0 ? false : _h, readOnly = _a.readOnly, required = _a.required, _j = _a.resetSelectionOnOptionsChange, resetSelectionOnOptionsChange = _j === void 0 ? false : _j, search = _a.search, _k = _a.searchNoResultsLabel, searchNoResultsLabel = _k === void 0 ? false : _k, _l = _a.showHints, showHints = _l === void 0 ? false : _l, size = _a.size, text = _a.text, tooltipFeedback = _a.tooltipFeedback, valid = _a.valid, value = _a.value, virtualScroller = _a.virtualScroller, visible = _a.visible, _m = _a.visibleItems, visibleItems = _m === void 0 ? 10 : _m, rest = __rest(_a, ["allowOnlyDefinedOptions", "className", "cleaner", "clearSearchOnSelect", "container", "disabled", "feedback", "feedbackInvalid", "feedbackValid", "highlightOptionsOnSearch", "id", "indicator", "invalid", "label", "loading", "name", "onChange", "onHide", "onInput", "onShow", "options", "optionsMaxHeight", "optionsTemplate", "optionsGroupsTemplate", "placeholder", "portal", "readOnly", "required", "resetSelectionOnOptionsChange", "search", "searchNoResultsLabel", "showHints", "size", "text", "tooltipFeedback", "valid", "value", "virtualScroller", "visible", "visibleItems"]);
16
+ var autoCompleteRef = useRef(null);
17
+ var autoCompleteForkedRef = useForkedRef(ref, autoCompleteRef);
18
+ var dropdownRef = useRef(null);
19
+ var togglerRef = useRef(null);
20
+ var inputRef = useRef(null);
21
+ var inputHintRef = useRef(null);
22
+ var uniqueId = useId();
23
+ var _o = usePopper(), initPopper = _o.initPopper, destroyPopper = _o.destroyPopper;
24
+ var _p = useState(visible), _visible = _p[0], setVisible = _p[1];
25
+ var _q = useState(), hint = _q[0], setHint = _q[1];
26
+ var _r = useState(''), searchValue = _r[0], setSearchValue = _r[1];
27
+ var _s = useState(null), selected = _s[0], setSelected = _s[1];
28
+ var filteredOptions = useMemo(function () { return (isExternalSearch(search) ? options : filterOptions(options, searchValue)); }, [options, searchValue, search]);
29
+ var popperConfig = useMemo(function () { return ({
30
+ placement: (isRTL(autoCompleteRef.current) ? 'bottom-end' : 'bottom-start'),
31
+ modifiers: [
32
+ {
33
+ name: 'preventOverflow',
34
+ options: {
35
+ boundary: 'clippingParents',
36
+ },
37
+ },
38
+ {
39
+ name: 'offset',
40
+ options: {
41
+ offset: [0, 2],
42
+ },
43
+ },
44
+ ],
45
+ }); }, [autoCompleteRef.current]);
46
+ useEffect(function () {
47
+ if (resetSelectionOnOptionsChange) {
48
+ handleClear();
49
+ }
50
+ }, [options]);
51
+ useEffect(function () {
52
+ if (value && typeof value === 'string') {
53
+ handleSelect(value);
54
+ return;
55
+ }
56
+ if (value && typeof value === 'number') {
57
+ var foundOption = getFirstOptionByValue(value, options);
58
+ if (foundOption) {
59
+ handleSelect(foundOption);
60
+ }
61
+ return;
62
+ }
63
+ var _selected = flattenOptionsArray(filteredOptions).find(function (option) { return typeof option !== 'string' && option.selected === true; });
64
+ if (_selected) {
65
+ handleSelect(_selected);
66
+ }
67
+ }, [options, value]);
68
+ useEffect(function () {
69
+ if (!showHints) {
70
+ return;
71
+ }
72
+ var findOption = searchValue.length > 0
73
+ ? filteredOptions.find(function (option) {
74
+ return getOptionLabel(option).toLowerCase().startsWith(searchValue.toLowerCase());
75
+ })
76
+ : undefined;
77
+ setHint(findOption);
78
+ }, [filteredOptions, searchValue, showHints]);
79
+ useEffect(function () {
80
+ if (!searchNoResultsLabel &&
81
+ searchValue.length > 0 &&
82
+ filteredOptions.length === 0 &&
83
+ _visible) {
84
+ handleDropdownHide();
85
+ return;
86
+ }
87
+ if (searchValue.length > 0 && filteredOptions.length > 0 && !_visible) {
88
+ handleDropdownShow();
89
+ }
90
+ }, [filteredOptions]);
91
+ useEffect(function () {
92
+ if (visible === true) {
93
+ handleDropdownShow();
94
+ }
95
+ else if (visible === false) {
96
+ handleDropdownHide();
97
+ }
98
+ }, [visible]);
99
+ var handleClear = function () {
100
+ if (inputRef.current) {
101
+ inputRef.current.value = '';
102
+ }
103
+ setSearchValue('');
104
+ setSelected(null);
105
+ onChange === null || onChange === void 0 ? void 0 : onChange(null);
106
+ };
107
+ var handleGlobalSearch = function (event) {
108
+ if (isGlobalSearch(search) &&
109
+ inputRef.current &&
110
+ (event.key.length === 1 || event.key === 'Backspace' || event.key === 'Delete')) {
111
+ inputRef.current.focus();
112
+ }
113
+ };
114
+ var handleInputChange = function (event) {
115
+ var value = event.target.value;
116
+ handleSearch(value);
117
+ if (selected !== null) {
118
+ onChange === null || onChange === void 0 ? void 0 : onChange(null);
119
+ setSelected(null);
120
+ }
121
+ };
122
+ var handleInputKeyDown = function (event) {
123
+ var _a, _b, _c, _d;
124
+ if (event.key === 'Escape') {
125
+ handleDropdownHide();
126
+ return;
127
+ }
128
+ if ((event.key === 'Down' || event.key === 'ArrowDown') &&
129
+ ((_a = inputRef.current) === null || _a === void 0 ? void 0 : _a.value.length) === ((_b = inputRef.current) === null || _b === void 0 ? void 0 : _b.selectionStart)) {
130
+ event.preventDefault();
131
+ handleDropdownShow();
132
+ var target = event.target;
133
+ var firstOption = (_d = (_c = target.parentElement) === null || _c === void 0 ? void 0 : _c.parentElement) === null || _d === void 0 ? void 0 : _d.querySelectorAll('.autocomplete-option')[0];
134
+ if (firstOption) {
135
+ firstOption.focus();
136
+ }
137
+ return;
138
+ }
139
+ if (showHints && hint && event.key === 'Tab') {
140
+ event.preventDefault();
141
+ handleSelect(hint);
142
+ handleDropdownHide();
143
+ return;
144
+ }
145
+ if (event.key === 'Enter') {
146
+ var input = event.target;
147
+ var foundOptions = getFirstOptionByLabel(input.value, filteredOptions);
148
+ if (foundOptions) {
149
+ handleSelect(foundOptions);
150
+ }
151
+ else {
152
+ if (!allowOnlyDefinedOptions) {
153
+ handleSelect(input.value);
154
+ }
155
+ }
156
+ handleDropdownHide();
157
+ return;
158
+ }
159
+ if (event.key === 'Backspace' || event.key === 'Delete') {
160
+ if (selected !== null) {
161
+ setSelected(null);
162
+ onChange === null || onChange === void 0 ? void 0 : onChange(null);
163
+ }
164
+ return;
165
+ }
166
+ };
167
+ var handleKeyUp = useCallback(function (event) {
168
+ if (event.key === 'Escape') {
169
+ handleDropdownHide();
170
+ }
171
+ if (autoCompleteRef.current &&
172
+ !autoCompleteRef.current.contains(event.target)) {
173
+ handleDropdownHide();
174
+ }
175
+ }, []);
176
+ var handleMouseUp = useCallback(function (event) {
177
+ if (autoCompleteRef.current &&
178
+ autoCompleteRef.current.contains(event.target)) {
179
+ return;
180
+ }
181
+ handleDropdownHide();
182
+ }, []);
183
+ var handleOptionClick = function (option) {
184
+ handleSelect(option);
185
+ handleDropdownHide();
186
+ };
187
+ var handleSearch = function (search) {
188
+ onInput === null || onInput === void 0 ? void 0 : onInput(search);
189
+ setSearchValue(search);
190
+ };
191
+ var handleSelect = function (option) {
192
+ if (option && typeof option === 'object' && option.disabled) {
193
+ return;
194
+ }
195
+ if (inputRef.current) {
196
+ inputRef.current.value = option ? getOptionLabel(option) : '';
197
+ }
198
+ if (clearSearchOnSelect) {
199
+ handleSearch('');
200
+ }
201
+ else {
202
+ setHint('');
203
+ }
204
+ setSelected(option !== null && option !== void 0 ? option : null);
205
+ onChange === null || onChange === void 0 ? void 0 : onChange(option !== null && option !== void 0 ? option : null);
206
+ };
207
+ var handleDropdownShow = useCallback(function () {
208
+ var _a;
209
+ if (disabled || readOnly || _visible) {
210
+ return;
211
+ }
212
+ if (!isExternalSearch(search) &&
213
+ filteredOptions.length === 0 &&
214
+ searchNoResultsLabel === false) {
215
+ return;
216
+ }
217
+ if (portal && dropdownRef.current && togglerRef.current) {
218
+ dropdownRef.current.style.minWidth = "".concat(togglerRef.current.offsetWidth, "px");
219
+ }
220
+ setVisible(true);
221
+ onShow === null || onShow === void 0 ? void 0 : onShow();
222
+ window.addEventListener('mouseup', handleMouseUp);
223
+ window.addEventListener('keyup', handleKeyUp);
224
+ if (togglerRef.current && dropdownRef.current) {
225
+ setTimeout(function () {
226
+ initPopper(togglerRef.current, dropdownRef.current, popperConfig);
227
+ }, 1); // Allow DOM updates to complete before initializing Popper
228
+ }
229
+ (_a = inputRef.current) === null || _a === void 0 ? void 0 : _a.focus();
230
+ }, [
231
+ disabled,
232
+ readOnly,
233
+ _visible,
234
+ filteredOptions.length,
235
+ searchNoResultsLabel,
236
+ allowOnlyDefinedOptions,
237
+ onShow,
238
+ handleMouseUp,
239
+ handleKeyUp,
240
+ initPopper,
241
+ popperConfig,
242
+ ]);
243
+ var handleDropdownHide = useCallback(function () {
244
+ var _a;
245
+ setVisible(false);
246
+ onHide === null || onHide === void 0 ? void 0 : onHide();
247
+ window.removeEventListener('mouseup', handleMouseUp);
248
+ window.removeEventListener('keyup', handleKeyUp);
249
+ destroyPopper();
250
+ (_a = inputRef.current) === null || _a === void 0 ? void 0 : _a.focus();
251
+ }, [onHide, handleMouseUp, handleKeyUp, destroyPopper]);
252
+ return (React.createElement(CFormControlWrapper, { describedby: rest['aria-describedby'], feedback: feedback, feedbackInvalid: feedbackInvalid, feedbackValid: feedbackValid, id: id || "autocomplete-".concat(uniqueId), invalid: invalid, label: label, text: text, tooltipFeedback: tooltipFeedback, valid: valid },
253
+ React.createElement("div", { className: classNames('autocomplete', (_b = {},
254
+ _b["autocomplete-".concat(size)] = size,
255
+ _b.disabled = disabled,
256
+ _b['is-invalid'] = invalid,
257
+ _b['is-valid'] = valid,
258
+ _b.show = _visible,
259
+ _b), className), onKeyDown: handleGlobalSearch, ref: autoCompleteForkedRef },
260
+ React.createElement("div", { className: "autocomplete-input-group", onClick: function () { return handleDropdownShow(); }, ref: togglerRef },
261
+ showHints && searchValue !== '' && (React.createElement("input", { className: "autocomplete-input autocomplete-input-hint", id: id || "autocomplete-hint-".concat(uniqueId), autoComplete: "off", readOnly: true, tabIndex: -1, "aria-hidden": "true", value: hint ? "".concat(searchValue).concat(getOptionLabel(hint).slice(searchValue.length)) : '', ref: inputHintRef })),
262
+ React.createElement("input", __assign({ type: "text", className: "autocomplete-input", disabled: disabled, id: id || "autocomplete-".concat(uniqueId), name: name || "autocomplete-".concat(uniqueId), onBlur: function (event) {
263
+ event.preventDefault();
264
+ event.stopPropagation();
265
+ if (allowOnlyDefinedOptions && selected === null && filteredOptions.length === 0) {
266
+ handleClear();
267
+ }
268
+ }, onChange: handleInputChange, onKeyDown: handleInputKeyDown, placeholder: placeholder, autoComplete: "off", required: required, "aria-autocomplete": "list", "aria-expanded": _visible, "aria-haspopup": "listbox" }, (portal && { 'aria-owns': "autocomplete-listbox-".concat(uniqueId) }), { readOnly: readOnly, role: "combobox", ref: inputRef })),
269
+ (cleaner || indicator) && (React.createElement("div", { className: "autocomplete-buttons" },
270
+ !disabled && !readOnly && cleaner && selected && (React.createElement("button", { type: "button", className: "autocomplete-cleaner", onClick: function (event) {
271
+ event.preventDefault();
272
+ event.stopPropagation();
273
+ handleClear();
274
+ } })),
275
+ React.createElement("button", { type: "button", className: "autocomplete-indicator", disabled: !(searchNoResultsLabel || filteredOptions.length > 0) &&
276
+ isExternalSearch(search), onClick: function (event) {
277
+ event.preventDefault();
278
+ event.stopPropagation();
279
+ if (_visible) {
280
+ handleDropdownHide();
281
+ }
282
+ else {
283
+ handleDropdownShow();
284
+ }
285
+ } })))),
286
+ React.createElement(CConditionalPortal, { container: container, portal: portal },
287
+ React.createElement("div", { className: classNames('autocomplete-dropdown', {
288
+ show: portal && _visible,
289
+ }), id: "autocomplete-listbox-".concat(uniqueId), role: "listbox", "aria-labelledby": id || "autocomplete-".concat(uniqueId), ref: dropdownRef },
290
+ React.createElement(CAutocompleteOptions, { highlightOptionsOnSearch: highlightOptionsOnSearch, loading: loading, onOptionClick: function (option) {
291
+ return !disabled && !readOnly && handleOptionClick(option);
292
+ }, options: filteredOptions, optionsMaxHeight: optionsMaxHeight, optionsTemplate: optionsTemplate, optionsGroupsTemplate: optionsGroupsTemplate, searchNoResultsLabel: searchNoResultsLabel, searchValue: searchValue, selected: selected, virtualScroller: virtualScroller, visibleItems: visibleItems }))))));
293
+ });
294
+ CAutocomplete.propTypes = __assign({ allowOnlyDefinedOptions: PropTypes.bool, className: PropTypes.string, clearSearchOnSelect: PropTypes.bool, cleaner: PropTypes.bool, container: PropTypes.any, disabled: PropTypes.bool, highlightOptionsOnSearch: PropTypes.bool, indicator: PropTypes.bool, loading: PropTypes.bool, name: PropTypes.string, onChange: PropTypes.func, onHide: PropTypes.func, onInput: PropTypes.func, onShow: PropTypes.func, options: PropTypes.array.isRequired, optionsMaxHeight: PropTypes.oneOfType([PropTypes.number, PropTypes.string]), optionsTemplate: PropTypes.func, optionsGroupsTemplate: PropTypes.func, placeholder: PropTypes.string, portal: PropTypes.bool, required: PropTypes.bool, resetSelectionOnOptionsChange: PropTypes.bool, search: PropTypes.oneOfType([
295
+ PropTypes.oneOf(['external', 'global']),
296
+ PropTypes.shape({
297
+ external: PropTypes.bool.isRequired,
298
+ global: PropTypes.bool.isRequired,
299
+ }),
300
+ ]), searchNoResultsLabel: PropTypes.oneOfType([PropTypes.string, PropTypes.node]), showHints: PropTypes.bool, size: PropTypes.oneOf(['sm', 'lg']), value: PropTypes.oneOfType([PropTypes.number, PropTypes.string]), virtualScroller: PropTypes.bool, visible: PropTypes.bool, visibleItems: PropTypes.number }, CFormControlWrapper.propTypes);
301
+ CAutocomplete.displayName = 'CAutocomplete';
302
+
303
+ export { CAutocomplete };
304
+ //# sourceMappingURL=CAutocomplete.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CAutocomplete.js","sources":["../../../../src/components/autocomplete/CAutocomplete.tsx"],"sourcesContent":[null],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import React, { HTMLAttributes, ReactNode } from 'react';
2
+ import type { Option, OptionsGroup } from './types';
3
+ export interface CAutocompleteOptionsProps extends HTMLAttributes<HTMLDivElement> {
4
+ highlightOptionsOnSearch?: boolean;
5
+ loading?: boolean;
6
+ onOptionClick?: (option: Option) => void;
7
+ options: (Option | OptionsGroup)[];
8
+ optionsMaxHeight?: number | string;
9
+ optionsTemplate?: (option: Option) => ReactNode;
10
+ optionsGroupsTemplate?: (option: OptionsGroup) => ReactNode;
11
+ searchNoResultsLabel?: boolean | string | ReactNode;
12
+ searchValue?: string;
13
+ selected: Option | null;
14
+ virtualScroller?: boolean;
15
+ visibleItems?: number;
16
+ }
17
+ export declare const CAutocompleteOptions: React.ForwardRefExoticComponent<CAutocompleteOptionsProps & React.RefAttributes<HTMLDivElement>>;