@libs-ui/components-inputs-search 0.1.1-1
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/README.md +3 -0
- package/esm2022/index.mjs +3 -0
- package/esm2022/interfaces/config.interface.mjs +2 -0
- package/esm2022/libs-ui-components-inputs-search.mjs +5 -0
- package/esm2022/search.component.mjs +101 -0
- package/fesm2022/libs-ui-components-inputs-search.mjs +108 -0
- package/fesm2022/libs-ui-components-inputs-search.mjs.map +1 -0
- package/index.d.ts +2 -0
- package/interfaces/config.interface.d.ts +14 -0
- package/package.json +28 -0
- package/search.component.d.ts +39 -0
package/README.md
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export * from './search.component';
|
|
2
|
+
export * from './interfaces/config.interface';
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvaW5wdXRzL3NlYXJjaC9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxvQkFBb0IsQ0FBQztBQUNuQyxjQUFjLCtCQUErQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9zZWFyY2guY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vaW50ZXJmYWNlcy9jb25maWcuaW50ZXJmYWNlJztcbiJdfQ==
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmludGVyZmFjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMtdWkvY29tcG9uZW50cy9pbnB1dHMvc2VhcmNoL3NyYy9pbnRlcmZhY2VzL2NvbmZpZy5pbnRlcmZhY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBpbnRlcmZhY2UgSUlucHV0U2VhcmNoQ29uZmlnIHtcbiAgY2xhc3NJbmNsdWRlPzogc3RyaW5nO1xuICBjbGFzc0NvbnRhaW5lcklucHV0Pzogc3RyaW5nO1xuICBwbGFjZWhvbGRlcj86IHN0cmluZztcbiAgdmFsdWU/OiBzdHJpbmc7XG4gIG5vQm9yZGVyPzogYm9vbGVhbjtcbiAgYmFja2dyb3VuZE5vbmU/OiBib29sZWFuO1xuICBpY29uTGVmdENsYXNzPzogc3RyaW5nO1xuICBpY29uUmlnaHRDbGFzcz86IHN0cmluZztcbiAgZGVmYXVsdEhlaWdodD86IG51bWJlcjtcbiAgY2xhc3NDb3ZlcklucHV0U2VhcmNoPzogc3RyaW5nO1xuICBoYXNDbGVhclNlYXJjaD86IGJvb2xlYW47XG4gIHBvcG92ZXJDb250ZW50SWNvblJpZ2h0Pzogc3RyaW5nO1xufVxuIl19
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generated bundle index. Do not edit.
|
|
3
|
+
*/
|
|
4
|
+
export * from './index';
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlicy11aS1jb21wb25lbnRzLWlucHV0cy1zZWFyY2guanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvaW5wdXRzL3NlYXJjaC9zcmMvbGlicy11aS1jb21wb25lbnRzLWlucHV0cy1zZWFyY2gudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLFNBQVMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9pbmRleCc7XG4iXX0=
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import { ChangeDetectionStrategy, Component, input, output, signal } from '@angular/core';
|
|
2
|
+
import { LibsUiComponentsInputsInputComponent } from '@libs-ui/components-inputs-input';
|
|
3
|
+
import { TranslateModule } from '@ngx-translate/core';
|
|
4
|
+
import { Subject } from 'rxjs';
|
|
5
|
+
import { debounceTime, filter, takeUntil, throttleTime } from 'rxjs/operators';
|
|
6
|
+
import * as i0 from "@angular/core";
|
|
7
|
+
import * as i1 from "@ngx-translate/core";
|
|
8
|
+
export class LibsUiComponentsInputsSearchComponent {
|
|
9
|
+
// #region PROPERTY
|
|
10
|
+
valueSearch = signal('');
|
|
11
|
+
inputFunctionControl = signal(undefined);
|
|
12
|
+
onDestroy = new Subject();
|
|
13
|
+
onSearch = new Subject();
|
|
14
|
+
onEnter = new Subject();
|
|
15
|
+
timeout = signal(0);
|
|
16
|
+
searchingWhileEntering = signal(false);
|
|
17
|
+
// #region INPUT
|
|
18
|
+
disable = input(false);
|
|
19
|
+
readonly = input(false);
|
|
20
|
+
searchConfig = input({}, { transform: (value) => value || {} });
|
|
21
|
+
ignoreAutoComplete = input(); // không emit sự kiện sau 1 khoảng thời gian người dùng ngừng nhập
|
|
22
|
+
debounceTime = input(1000, { transform: (value) => value ?? 1000 });
|
|
23
|
+
ignoreStopPropagationEvent = input(false);
|
|
24
|
+
focusTimeOut = input(600, { transform: (value) => value ?? 600 });
|
|
25
|
+
blurTimeOut = input(600, { transform: (value) => value ?? 600 });
|
|
26
|
+
// #region OUTPUT
|
|
27
|
+
outSearch = output(); // sau 1 khoảng thời gian người dùng ngừng nhập sẽ emit sự kiện
|
|
28
|
+
outValueChange = output(); // sử dụng khi muốn lắng nghe mỗi lần gõ text
|
|
29
|
+
outIconLeft = output();
|
|
30
|
+
outIconRight = output();
|
|
31
|
+
outFocusAndBlur = output();
|
|
32
|
+
outFunctionsControl = output();
|
|
33
|
+
ngOnInit() {
|
|
34
|
+
this.valueSearch.set(this.searchConfig()?.value || '');
|
|
35
|
+
this.onSearch
|
|
36
|
+
.pipe(debounceTime(this.debounceTime()), filter((keySearch) => !!keySearch), takeUntil(this.onDestroy))
|
|
37
|
+
.subscribe((keySearch) => {
|
|
38
|
+
if (this.searchingWhileEntering() || this.ignoreAutoComplete() || !this.valueSearch()) {
|
|
39
|
+
this.searchingWhileEntering.set(false);
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
this.outSearch.emit(`${keySearch}`.trim());
|
|
43
|
+
});
|
|
44
|
+
this.onEnter.pipe(throttleTime(this.debounceTime()), takeUntil(this.onDestroy)).subscribe((keySearch) => {
|
|
45
|
+
this.outSearch.emit(`${keySearch}`.trim());
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
// #region FUNCTIONS
|
|
49
|
+
handlerValueChange(keySearch) {
|
|
50
|
+
this.outValueChange.emit(keySearch.toString());
|
|
51
|
+
this.valueSearch.set(keySearch);
|
|
52
|
+
this.searchingWhileEntering.set(false);
|
|
53
|
+
if (this.valueSearch()) {
|
|
54
|
+
this.onSearch.next(this.valueSearch());
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
clearTimeout(this.timeout());
|
|
58
|
+
this.timeout.set(setTimeout(() => {
|
|
59
|
+
if (!this.valueSearch() && !this.ignoreAutoComplete()) {
|
|
60
|
+
this.outSearch.emit(this.valueSearch());
|
|
61
|
+
}
|
|
62
|
+
}, this.debounceTime() / 2));
|
|
63
|
+
}
|
|
64
|
+
handlerEnterInput(e) {
|
|
65
|
+
this.valueSearch.set(e.target.value);
|
|
66
|
+
this.searchingWhileEntering.set(true);
|
|
67
|
+
this.onEnter.next(this.valueSearch());
|
|
68
|
+
}
|
|
69
|
+
handlerEventIconLeft(eventName) {
|
|
70
|
+
this.outIconLeft.emit(eventName);
|
|
71
|
+
}
|
|
72
|
+
handlerEventIconRight(eventName) {
|
|
73
|
+
if (this.searchConfig()?.hasClearSearch) {
|
|
74
|
+
this.valueSearch.set('');
|
|
75
|
+
this.outSearch.emit(this.valueSearch());
|
|
76
|
+
}
|
|
77
|
+
this.outIconRight.emit(eventName);
|
|
78
|
+
}
|
|
79
|
+
handlerFunctionControl(event) {
|
|
80
|
+
this.outFunctionsControl.emit(event);
|
|
81
|
+
this.inputFunctionControl.set(event);
|
|
82
|
+
}
|
|
83
|
+
get FunctionsControl() {
|
|
84
|
+
return this.inputFunctionControl();
|
|
85
|
+
}
|
|
86
|
+
handlerFocusAndBlur(event) {
|
|
87
|
+
this.outFocusAndBlur.emit(event);
|
|
88
|
+
}
|
|
89
|
+
ngOnDestroy() {
|
|
90
|
+
clearTimeout(this.timeout());
|
|
91
|
+
this.onDestroy.next();
|
|
92
|
+
this.onDestroy.complete();
|
|
93
|
+
}
|
|
94
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: LibsUiComponentsInputsSearchComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
95
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.2.14", type: LibsUiComponentsInputsSearchComponent, isStandalone: true, selector: "libs_ui-components-inputs-search", inputs: { disable: { classPropertyName: "disable", publicName: "disable", isSignal: true, isRequired: false, transformFunction: null }, readonly: { classPropertyName: "readonly", publicName: "readonly", isSignal: true, isRequired: false, transformFunction: null }, searchConfig: { classPropertyName: "searchConfig", publicName: "searchConfig", isSignal: true, isRequired: false, transformFunction: null }, ignoreAutoComplete: { classPropertyName: "ignoreAutoComplete", publicName: "ignoreAutoComplete", isSignal: true, isRequired: false, transformFunction: null }, debounceTime: { classPropertyName: "debounceTime", publicName: "debounceTime", isSignal: true, isRequired: false, transformFunction: null }, ignoreStopPropagationEvent: { classPropertyName: "ignoreStopPropagationEvent", publicName: "ignoreStopPropagationEvent", isSignal: true, isRequired: false, transformFunction: null }, focusTimeOut: { classPropertyName: "focusTimeOut", publicName: "focusTimeOut", isSignal: true, isRequired: false, transformFunction: null }, blurTimeOut: { classPropertyName: "blurTimeOut", publicName: "blurTimeOut", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { outSearch: "outSearch", outValueChange: "outValueChange", outIconLeft: "outIconLeft", outIconRight: "outIconRight", outFocusAndBlur: "outFocusAndBlur", outFunctionsControl: "outFunctionsControl" }, ngImport: i0, template: "@let constHtmlPlaceholder = searchConfig().placeholder || 'i18n_search';\n<libs_ui-components-inputs-input\n [disable]=\"disable()\"\n [readonly]=\"readonly()\"\n [ignoreStopPropagationEvent]=\"ignoreStopPropagationEvent()\"\n [defaultHeight]=\"searchConfig().defaultHeight || 32\"\n [classInclude]=\"'w-full ' + (searchConfig().classInclude ? searchConfig().classInclude : '')\"\n [iconLeftClass]=\"searchConfig().iconLeftClass ?? 'libs-ui-icon-search'\"\n [iconRightClass]=\"(searchConfig().hasClearSearch && valueSearch() ? 'libs-ui-icon-close-circle-solid cursor-pointer ' : '') + (searchConfig().iconRightClass ? ' ' + searchConfig().iconRightClass : '')\"\n [setIconRightColorSameColorDisableReadOnly]=\"searchConfig().hasClearSearch && valueSearch() ? true : false\"\n [value]=\"searchConfig().value ?? this.valueSearch()\"\n [placeholder]=\"constHtmlPlaceholder | translate\"\n [noBorder]=\"searchConfig().noBorder || false\"\n [backgroundNone]=\"searchConfig().backgroundNone || false\"\n [classContainerInput]=\"searchConfig().classContainerInput || ''\"\n [popoverContentIconRight]=\"searchConfig().popoverContentIconRight || ''\"\n [focusTimeOut]=\"focusTimeOut()\"\n [blurTimeOut]=\"blurTimeOut()\"\n (outChange)=\"handlerValueChange($event)\"\n (outIconLeft)=\"handlerEventIconLeft($event)\"\n (outIconRight)=\"handlerEventIconRight($event)\"\n (outFunctionsControl)=\"handlerFunctionControl($event)\"\n (outEnterEvent)=\"handlerEnterInput($event)\"\n (outFocusAndBlurEvent)=\"handlerFocusAndBlur($event)\" />\n", dependencies: [{ kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }, { kind: "component", type: LibsUiComponentsInputsInputComponent, selector: "libs_ui-components-inputs-input", inputs: ["tagInput", "dataType", "typeInput", "modeInput", "tabInsertContentTagInput", "textAreaEnterNotNewLine", "emitEmptyInDataTypeNumber", "keepZeroInTypeInt", "autoAddZeroLessThan10InTypeInt", "ignoreBlockInputMaxValue", "maxValueNumber", "minValueNumber", "fixedFloat", "acceptNegativeValue", "valueUpDownNumber", "classInclude", "maxLength", "readonly", "disable", "noBorder", "backgroundNone", "borderError", "useColorModeExist", "placeholder", "keepPlaceholderOnly", "value", "autoRemoveEmoji", "defaultHeight", "minHeightTextArea", "maxHeightTextArea", "focusTimeOut", "selectAllTimeOut", "blurTimeOut", "zIndexPopoverContent", "classContainerInput", "showCount", "ignoreStopPropagationEvent", "resize", "templateLeftBottomInput", "templateRightBottomInput", "classContainerBottomInput", "ignoreWidthInput100", "iframeTextareaCustomStyle", "iconLeftClass", "popoverContentIconLeft", "iconRightClass", "popoverContentIconRight", "resetAutoCompletePassword", "acceptOnlyClickIcon", "setIconRightColorSameColorDisableReadOnly", "onlyAcceptNegativeValue", "maxLengthNumberCount", "focusInput"], outputs: ["maxValueNumberChange", "minValueNumberChange", "fixedFloatChange", "acceptNegativeValueChange", "maxLengthChange", "valueChange", "maxLengthNumberCountChange", "outHeightAreaChange", "outChange", "outFocusAndBlurEvent", "outEnterEvent", "outInputEvent", "outIconLeft", "outIconRight", "outFunctionsControl", "outFilesDrop", "outFileDrop", "outChangeValueByButtonUpDown"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
96
|
+
}
|
|
97
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: LibsUiComponentsInputsSearchComponent, decorators: [{
|
|
98
|
+
type: Component,
|
|
99
|
+
args: [{ selector: 'libs_ui-components-inputs-search', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [TranslateModule, LibsUiComponentsInputsInputComponent], template: "@let constHtmlPlaceholder = searchConfig().placeholder || 'i18n_search';\n<libs_ui-components-inputs-input\n [disable]=\"disable()\"\n [readonly]=\"readonly()\"\n [ignoreStopPropagationEvent]=\"ignoreStopPropagationEvent()\"\n [defaultHeight]=\"searchConfig().defaultHeight || 32\"\n [classInclude]=\"'w-full ' + (searchConfig().classInclude ? searchConfig().classInclude : '')\"\n [iconLeftClass]=\"searchConfig().iconLeftClass ?? 'libs-ui-icon-search'\"\n [iconRightClass]=\"(searchConfig().hasClearSearch && valueSearch() ? 'libs-ui-icon-close-circle-solid cursor-pointer ' : '') + (searchConfig().iconRightClass ? ' ' + searchConfig().iconRightClass : '')\"\n [setIconRightColorSameColorDisableReadOnly]=\"searchConfig().hasClearSearch && valueSearch() ? true : false\"\n [value]=\"searchConfig().value ?? this.valueSearch()\"\n [placeholder]=\"constHtmlPlaceholder | translate\"\n [noBorder]=\"searchConfig().noBorder || false\"\n [backgroundNone]=\"searchConfig().backgroundNone || false\"\n [classContainerInput]=\"searchConfig().classContainerInput || ''\"\n [popoverContentIconRight]=\"searchConfig().popoverContentIconRight || ''\"\n [focusTimeOut]=\"focusTimeOut()\"\n [blurTimeOut]=\"blurTimeOut()\"\n (outChange)=\"handlerValueChange($event)\"\n (outIconLeft)=\"handlerEventIconLeft($event)\"\n (outIconRight)=\"handlerEventIconRight($event)\"\n (outFunctionsControl)=\"handlerFunctionControl($event)\"\n (outEnterEvent)=\"handlerEnterInput($event)\"\n (outFocusAndBlurEvent)=\"handlerFocusAndBlur($event)\" />\n" }]
|
|
100
|
+
}] });
|
|
101
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMtdWkvY29tcG9uZW50cy9pbnB1dHMvc2VhcmNoL3NyYy9zZWFyY2guY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy11aS9jb21wb25lbnRzL2lucHV0cy9zZWFyY2gvc3JjL3NlYXJjaC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFxQixLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM3RyxPQUFPLEVBQWtELG9DQUFvQyxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFFeEksT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7QUFXL0UsTUFBTSxPQUFPLHFDQUFxQztJQUNoRCxtQkFBbUI7SUFDVCxXQUFXLEdBQUcsTUFBTSxDQUFTLEVBQUUsQ0FBQyxDQUFDO0lBRW5DLG9CQUFvQixHQUFHLE1BQU0sQ0FBeUMsU0FBUyxDQUFDLENBQUM7SUFDakYsU0FBUyxHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7SUFDaEMsUUFBUSxHQUFvQixJQUFJLE9BQU8sRUFBRSxDQUFDO0lBQzFDLE9BQU8sR0FBb0IsSUFBSSxPQUFPLEVBQUUsQ0FBQztJQUN6QyxPQUFPLEdBQUcsTUFBTSxDQUFTLENBQUMsQ0FBQyxDQUFDO0lBQzVCLHNCQUFzQixHQUFHLE1BQU0sQ0FBVSxLQUFLLENBQUMsQ0FBQztJQUV4RCxnQkFBZ0I7SUFDUCxPQUFPLEdBQUcsS0FBSyxDQUFVLEtBQUssQ0FBQyxD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Q0FBQyxDQUFDO1lBQ3pCLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO1FBQzFDLENBQUM7UUFDRCxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBRVMsc0JBQXNCLENBQUMsS0FBaUM7UUFDaEUsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNyQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFFRCxJQUFXLGdCQUFnQjtRQUN6QixPQUFPLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO0lBQ3JDLENBQUM7SUFFUyxtQkFBbUIsQ0FBQyxLQUF5QjtRQUNyRCxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNuQyxDQUFDO0lBRUQsV0FBVztRQUNULFlBQVksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztRQUM3QixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDNUIsQ0FBQzt3R0F6R1UscUNBQXFDOzRGQUFyQyxxQ0FBcUMsKzdDQ2hCbEQsNmdEQXdCQSwyQ0RWWSxlQUFlLDRGQUFFLG9DQUFvQzs7NEZBRXBELHFDQUFxQztrQkFSakQsU0FBUzsrQkFFRSxrQ0FBa0MsY0FFaEMsSUFBSSxtQkFDQyx1QkFBdUIsQ0FBQyxNQUFNLFdBQ3RDLENBQUMsZUFBZSxFQUFFLG9DQUFvQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgT25EZXN0cm95LCBPbkluaXQsIGlucHV0LCBvdXRwdXQsIHNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSUZvY3VzQW5kQmx1ckV2ZW50LCBJSW5wdXRGdW5jdGlvbkNvbnRyb2xFdmVudCwgTGlic1VpQ29tcG9uZW50c0lucHV0c0lucHV0Q29tcG9uZW50IH0gZnJvbSAnQGxpYnMtdWkvY29tcG9uZW50cy1pbnB1dHMtaW5wdXQnO1xuaW1wb3J0IHsgSUV2ZW50IH0gZnJvbSAnQGxpYnMtdWkvaW50ZXJmYWNlcy10eXBlcyc7XG5pbXBvcnQgeyBUcmFuc2xhdGVNb2R1bGUgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgZmlsdGVyLCB0YWtlVW50aWwsIHRocm90dGxlVGltZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IElJbnB1dFNlYXJjaENvbmZpZyB9IGZyb20gJy4vaW50ZXJmYWNlcy9jb25maWcuaW50ZXJmYWNlJztcblxuQENvbXBvbmVudCh7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvY29tcG9uZW50LXNlbGVjdG9yXG4gIHNlbGVjdG9yOiAnbGlic191aS1jb21wb25lbnRzLWlucHV0cy1zZWFyY2gnLFxuICB0ZW1wbGF0ZVVybDogJy4vc2VhcmNoLmNvbXBvbmVudC5odG1sJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGltcG9ydHM6IFtUcmFuc2xhdGVNb2R1bGUsIExpYnNVaUNvbXBvbmVudHNJbnB1dHNJbnB1dENvbXBvbmVudF0sXG59KVxuZXhwb3J0IGNsYXNzIExpYnNVaUNvbXBvbmVudHNJbnB1dHNTZWFyY2hDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIC8vICNyZWdpb24gUFJPUEVSVFlcbiAgcHJvdGVjdGVkIHZhbHVlU2VhcmNoID0gc2lnbmFsPHN0cmluZz4oJycpO1xuXG4gIHByaXZhdGUgaW5wdXRGdW5jdGlvbkNvbnRyb2wgPSBzaWduYWw8SUlucHV0RnVuY3Rpb25Db250cm9sRXZlbnQgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIHByaXZhdGUgb25EZXN0cm95ID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgcHJpdmF0ZSBvblNlYXJjaDogU3ViamVjdDxzdHJpbmc+ID0gbmV3IFN1YmplY3QoKTtcbiAgcHJpdmF0ZSBvbkVudGVyOiBTdWJqZWN0PHN0cmluZz4gPSBuZXcgU3ViamVjdCgpO1xuICBwcml2YXRlIHRpbWVvdXQgPSBzaWduYWw8bnVtYmVyPigwKTtcbiAgcHJpdmF0ZSBzZWFyY2hpbmdXaGlsZUVudGVyaW5nID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcblxuICAvLyAjcmVnaW9uIElOUFVUXG4gIHJlYWRvbmx5IGRpc2FibGUgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XG4gIHJlYWRvbmx5IHJlYWRvbmx5ID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xuICByZWFkb25seSBzZWFyY2hDb25maWcgPSBpbnB1dDxJSW5wdXRTZWFyY2hDb25maWcsIElJbnB1dFNlYXJjaENvbmZpZz4oe30sIHsgdHJhbnNmb3JtOiAodmFsdWUpID0+IHZhbHVlIHx8IHt9IH0pO1xuICByZWFkb25seSBpZ25vcmVBdXRvQ29tcGxldGUgPSBpbnB1dDxib29sZWFuPigpOyAvLyBraMO0bmcgZW1pdCBz4buxIGtp4buHbiBzYXUgMSBraG/huqNuZyB0aOG7nWkgZ2lhbiBuZ8aw4budaSBkw7luZyBuZ+G7q25nIG5o4bqtcFxuICByZWFkb25seSBkZWJvdW5jZVRpbWUgPSBpbnB1dDxudW1iZXIsIG51bWJlcj4oMTAwMCwgeyB0cmFuc2Zvcm06ICh2YWx1ZSkgPT4gdmFsdWUgPz8gMTAwMCB9KTtcbiAgcmVhZG9ubHkgaWdub3JlU3RvcFByb3BhZ2F0aW9uRXZlbnQgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XG4gIHJlYWRvbmx5IGZvY3VzVGltZU91dCA9IGlucHV0PG51bWJlciwgbnVtYmVyPig2MDAsIHsgdHJhbnNmb3JtOiAodmFsdWUpID0+IHZhbHVlID8/IDYwMCB9KTtcbiAgcmVhZG9ubHkgYmx1clRpbWVPdXQgPSBpbnB1dDxudW1iZXIsIG51bWJlcj4oNjAwLCB7IHRyYW5zZm9ybTogKHZhbHVlKSA9PiB2YWx1ZSA/PyA2MDAgfSk7XG5cbiAgLy8gI3JlZ2lvbiBPVVRQVVRcbiAgcmVhZG9ubHkgb3V0U2VhcmNoID0gb3V0cHV0PHN0cmluZz4oKTsgLy8gc2F1IDEga2hv4bqjbmcgdGjhu51pIGdpYW4gbmfGsOG7nWkgZMO5bmcgbmfhu6tuZyBuaOG6rXAgc+G6vSBlbWl0IHPhu7Ega2nhu4duXG4gIHJlYWRvbmx5IG91dFZhbHVlQ2hhbmdlID0gb3V0cHV0PHN0cmluZz4oKTsgLy8gc+G7rSBk4bulbmcga2hpIG114buRbiBs4bqvbmcgbmdoZSBt4buXaSBs4bqnbiBnw7UgdGV4dFxuICByZWFkb25seSBvdXRJY29uTGVmdCA9IG91dHB1dDxzdHJpbmc+KCk7XG4gIHJlYWRvbmx5IG91dEljb25SaWdodCA9IG91dHB1dDxzdHJpbmc+KCk7XG4gIHJlYWRvbmx5IG91dEZvY3VzQW5kQmx1ciA9IG91dHB1dDxJRm9jdXNBbmRCbHVyRXZlbnQ+KCk7XG4gIHJlYWRvbmx5IG91dEZ1bmN0aW9uc0NvbnRyb2wgPSBvdXRwdXQ8SUlucHV0RnVuY3Rpb25Db250cm9sRXZlbnQ+KCk7XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy52YWx1ZVNlYXJjaC5zZXQodGhpcy5zZWFyY2hDb25maWcoKT8udmFsdWUgfHwgJycpO1xuICAgIHRoaXMub25TZWFyY2hcbiAgICAgIC5waXBlKFxuICAgICAgICBkZWJvdW5jZVRpbWUodGhpcy5kZWJvdW5jZVRpbWUoKSksXG4gICAgICAgIGZpbHRlcigoa2V5U2VhcmNoKSA9PiAhIWtleVNlYXJjaCksXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLm9uRGVzdHJveSlcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKGtleVNlYXJjaCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5zZWFyY2hpbmdXaGlsZUVudGVyaW5nKCkgfHwgdGhpcy5pZ25vcmVBdXRvQ29tcGxldGUoKSB8fCAhdGhpcy52YWx1ZVNlYXJjaCgpKSB7XG4gICAgICAgICAgdGhpcy5zZWFyY2hpbmdXaGlsZUVudGVyaW5nLnNldChmYWxzZSk7XG5cbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5vdXRTZWFyY2guZW1pdChgJHtrZXlTZWFyY2h9YC50cmltKCkpO1xuICAgICAgfSk7XG4gICAgdGhpcy5vbkVudGVyLnBpcGUodGhyb3R0bGVUaW1lKHRoaXMuZGVib3VuY2VUaW1lKCkpLCB0YWtlVW50aWwodGhpcy5vbkRlc3Ryb3kpKS5zdWJzY3JpYmUoKGtleVNlYXJjaCkgPT4ge1xuICAgICAgdGhpcy5vdXRTZWFyY2guZW1pdChgJHtrZXlTZWFyY2h9YC50cmltKCkpO1xuICAgIH0pO1xuICB9XG5cbiAgLy8gI3JlZ2lvbiBGVU5DVElPTlNcbiAgcHJvdGVjdGVkIGhhbmRsZXJWYWx1ZUNoYW5nZShrZXlTZWFyY2g6IHN0cmluZykge1xuICAgIHRoaXMub3V0VmFsdWVDaGFuZ2UuZW1pdChrZXlTZWFyY2gudG9TdHJpbmcoKSk7XG4gICAgdGhpcy52YWx1ZVNlYXJjaC5zZXQoa2V5U2VhcmNoIGFzIHN0cmluZyk7XG4gICAgdGhpcy5zZWFyY2hpbmdXaGlsZUVudGVyaW5nLnNldChmYWxzZSk7XG4gICAgaWYgKHRoaXMudmFsdWVTZWFyY2goKSkge1xuICAgICAgdGhpcy5vblNlYXJjaC5uZXh0KHRoaXMudmFsdWVTZWFyY2goKSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY2xlYXJUaW1lb3V0KHRoaXMudGltZW91dCgpKTtcbiAgICB0aGlzLnRpbWVvdXQuc2V0KFxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGlmICghdGhpcy52YWx1ZVNlYXJjaCgpICYmICF0aGlzLmlnbm9yZUF1dG9Db21wbGV0ZSgpKSB7XG4gICAgICAgICAgdGhpcy5vdXRTZWFyY2guZW1pdCh0aGlzLnZhbHVlU2VhcmNoKCkpO1xuICAgICAgICB9XG4gICAgICB9LCB0aGlzLmRlYm91bmNlVGltZSgpIC8gMilcbiAgICApO1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZXJFbnRlcklucHV0KGU6IElFdmVudCkge1xuICAgIHRoaXMudmFsdWVTZWFyY2guc2V0KGUudGFyZ2V0LnZhbHVlKTtcbiAgICB0aGlzLnNlYXJjaGluZ1doaWxlRW50ZXJpbmcuc2V0KHRydWUpO1xuICAgIHRoaXMub25FbnRlci5uZXh0KHRoaXMudmFsdWVTZWFyY2goKSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlckV2ZW50SWNvbkxlZnQoZXZlbnROYW1lOiBzdHJpbmcpIHtcbiAgICB0aGlzLm91dEljb25MZWZ0LmVtaXQoZXZlbnROYW1lKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyRXZlbnRJY29uUmlnaHQoZXZlbnROYW1lOiBzdHJpbmcpIHtcbiAgICBpZiAodGhpcy5zZWFyY2hDb25maWcoKT8uaGFzQ2xlYXJTZWFyY2gpIHtcbiAgICAgIHRoaXMudmFsdWVTZWFyY2guc2V0KCcnKTtcbiAgICAgIHRoaXMub3V0U2VhcmNoLmVtaXQodGhpcy52YWx1ZVNlYXJjaCgpKTtcbiAgICB9XG4gICAgdGhpcy5vdXRJY29uUmlnaHQuZW1pdChldmVudE5hbWUpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZXJGdW5jdGlvbkNvbnRyb2woZXZlbnQ6IElJbnB1dEZ1bmN0aW9uQ29udHJvbEV2ZW50KSB7XG4gICAgdGhpcy5vdXRGdW5jdGlvbnNDb250cm9sLmVtaXQoZXZlbnQpO1xuICAgIHRoaXMuaW5wdXRGdW5jdGlvbkNvbnRyb2wuc2V0KGV2ZW50KTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgRnVuY3Rpb25zQ29udHJvbCgpOiBJSW5wdXRGdW5jdGlvbkNvbnRyb2xFdmVudCB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuaW5wdXRGdW5jdGlvbkNvbnRyb2woKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyRm9jdXNBbmRCbHVyKGV2ZW50OiBJRm9jdXNBbmRCbHVyRXZlbnQpIHtcbiAgICB0aGlzLm91dEZvY3VzQW5kQmx1ci5lbWl0KGV2ZW50KTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIGNsZWFyVGltZW91dCh0aGlzLnRpbWVvdXQoKSk7XG4gICAgdGhpcy5vbkRlc3Ryb3kubmV4dCgpO1xuICAgIHRoaXMub25EZXN0cm95LmNvbXBsZXRlKCk7XG4gIH1cbn1cbiIsIkBsZXQgY29uc3RIdG1sUGxhY2Vob2xkZXIgPSBzZWFyY2hDb25maWcoKS5wbGFjZWhvbGRlciB8fCAnaTE4bl9zZWFyY2gnO1xuPGxpYnNfdWktY29tcG9uZW50cy1pbnB1dHMtaW5wdXRcbiAgW2Rpc2FibGVdPVwiZGlzYWJsZSgpXCJcbiAgW3JlYWRvbmx5XT1cInJlYWRvbmx5KClcIlxuICBbaWdub3JlU3RvcFByb3BhZ2F0aW9uRXZlbnRdPVwiaWdub3JlU3RvcFByb3BhZ2F0aW9uRXZlbnQoKVwiXG4gIFtkZWZhdWx0SGVpZ2h0XT1cInNlYXJjaENvbmZpZygpLmRlZmF1bHRIZWlnaHQgfHwgMzJcIlxuICBbY2xhc3NJbmNsdWRlXT1cIid3LWZ1bGwgJyArIChzZWFyY2hDb25maWcoKS5jbGFzc0luY2x1ZGUgPyBzZWFyY2hDb25maWcoKS5jbGFzc0luY2x1ZGUgOiAnJylcIlxuICBbaWNvbkxlZnRDbGFzc109XCJzZWFyY2hDb25maWcoKS5pY29uTGVmdENsYXNzID8/ICdsaWJzLXVpLWljb24tc2VhcmNoJ1wiXG4gIFtpY29uUmlnaHRDbGFzc109XCIoc2VhcmNoQ29uZmlnKCkuaGFzQ2xlYXJTZWFyY2ggJiYgdmFsdWVTZWFyY2goKSA/ICdsaWJzLXVpLWljb24tY2xvc2UtY2lyY2xlLXNvbGlkIGN1cnNvci1wb2ludGVyICcgOiAnJykgKyAoc2VhcmNoQ29uZmlnKCkuaWNvblJpZ2h0Q2xhc3MgPyAnICcgKyBzZWFyY2hDb25maWcoKS5pY29uUmlnaHRDbGFzcyA6ICcnKVwiXG4gIFtzZXRJY29uUmlnaHRDb2xvclNhbWVDb2xvckRpc2FibGVSZWFkT25seV09XCJzZWFyY2hDb25maWcoKS5oYXNDbGVhclNlYXJjaCAmJiB2YWx1ZVNlYXJjaCgpID8gdHJ1ZSA6IGZhbHNlXCJcbiAgW3ZhbHVlXT1cInNlYXJjaENvbmZpZygpLnZhbHVlID8/IHRoaXMudmFsdWVTZWFyY2goKVwiXG4gIFtwbGFjZWhvbGRlcl09XCJjb25zdEh0bWxQbGFjZWhvbGRlciB8IHRyYW5zbGF0ZVwiXG4gIFtub0JvcmRlcl09XCJzZWFyY2hDb25maWcoKS5ub0JvcmRlciB8fCBmYWxzZVwiXG4gIFtiYWNrZ3JvdW5kTm9uZV09XCJzZWFyY2hDb25maWcoKS5iYWNrZ3JvdW5kTm9uZSB8fCBmYWxzZVwiXG4gIFtjbGFzc0NvbnRhaW5lcklucHV0XT1cInNlYXJjaENvbmZpZygpLmNsYXNzQ29udGFpbmVySW5wdXQgfHwgJydcIlxuICBbcG9wb3ZlckNvbnRlbnRJY29uUmlnaHRdPVwic2VhcmNoQ29uZmlnKCkucG9wb3ZlckNvbnRlbnRJY29uUmlnaHQgfHwgJydcIlxuICBbZm9jdXNUaW1lT3V0XT1cImZvY3VzVGltZU91dCgpXCJcbiAgW2JsdXJUaW1lT3V0XT1cImJsdXJUaW1lT3V0KClcIlxuICAob3V0Q2hhbmdlKT1cImhhbmRsZXJWYWx1ZUNoYW5nZSgkZXZlbnQpXCJcbiAgKG91dEljb25MZWZ0KT1cImhhbmRsZXJFdmVudEljb25MZWZ0KCRldmVudClcIlxuICAob3V0SWNvblJpZ2h0KT1cImhhbmRsZXJFdmVudEljb25SaWdodCgkZXZlbnQpXCJcbiAgKG91dEZ1bmN0aW9uc0NvbnRyb2wpPVwiaGFuZGxlckZ1bmN0aW9uQ29udHJvbCgkZXZlbnQpXCJcbiAgKG91dEVudGVyRXZlbnQpPVwiaGFuZGxlckVudGVySW5wdXQoJGV2ZW50KVwiXG4gIChvdXRGb2N1c0FuZEJsdXJFdmVudCk9XCJoYW5kbGVyRm9jdXNBbmRCbHVyKCRldmVudClcIiAvPlxuIl19
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
import * as i0 from '@angular/core';
|
|
2
|
+
import { signal, input, output, ChangeDetectionStrategy, Component } from '@angular/core';
|
|
3
|
+
import { LibsUiComponentsInputsInputComponent } from '@libs-ui/components-inputs-input';
|
|
4
|
+
import * as i1 from '@ngx-translate/core';
|
|
5
|
+
import { TranslateModule } from '@ngx-translate/core';
|
|
6
|
+
import { Subject } from 'rxjs';
|
|
7
|
+
import { debounceTime, filter, takeUntil, throttleTime } from 'rxjs/operators';
|
|
8
|
+
|
|
9
|
+
class LibsUiComponentsInputsSearchComponent {
|
|
10
|
+
// #region PROPERTY
|
|
11
|
+
valueSearch = signal('');
|
|
12
|
+
inputFunctionControl = signal(undefined);
|
|
13
|
+
onDestroy = new Subject();
|
|
14
|
+
onSearch = new Subject();
|
|
15
|
+
onEnter = new Subject();
|
|
16
|
+
timeout = signal(0);
|
|
17
|
+
searchingWhileEntering = signal(false);
|
|
18
|
+
// #region INPUT
|
|
19
|
+
disable = input(false);
|
|
20
|
+
readonly = input(false);
|
|
21
|
+
searchConfig = input({}, { transform: (value) => value || {} });
|
|
22
|
+
ignoreAutoComplete = input(); // không emit sự kiện sau 1 khoảng thời gian người dùng ngừng nhập
|
|
23
|
+
debounceTime = input(1000, { transform: (value) => value ?? 1000 });
|
|
24
|
+
ignoreStopPropagationEvent = input(false);
|
|
25
|
+
focusTimeOut = input(600, { transform: (value) => value ?? 600 });
|
|
26
|
+
blurTimeOut = input(600, { transform: (value) => value ?? 600 });
|
|
27
|
+
// #region OUTPUT
|
|
28
|
+
outSearch = output(); // sau 1 khoảng thời gian người dùng ngừng nhập sẽ emit sự kiện
|
|
29
|
+
outValueChange = output(); // sử dụng khi muốn lắng nghe mỗi lần gõ text
|
|
30
|
+
outIconLeft = output();
|
|
31
|
+
outIconRight = output();
|
|
32
|
+
outFocusAndBlur = output();
|
|
33
|
+
outFunctionsControl = output();
|
|
34
|
+
ngOnInit() {
|
|
35
|
+
this.valueSearch.set(this.searchConfig()?.value || '');
|
|
36
|
+
this.onSearch
|
|
37
|
+
.pipe(debounceTime(this.debounceTime()), filter((keySearch) => !!keySearch), takeUntil(this.onDestroy))
|
|
38
|
+
.subscribe((keySearch) => {
|
|
39
|
+
if (this.searchingWhileEntering() || this.ignoreAutoComplete() || !this.valueSearch()) {
|
|
40
|
+
this.searchingWhileEntering.set(false);
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
43
|
+
this.outSearch.emit(`${keySearch}`.trim());
|
|
44
|
+
});
|
|
45
|
+
this.onEnter.pipe(throttleTime(this.debounceTime()), takeUntil(this.onDestroy)).subscribe((keySearch) => {
|
|
46
|
+
this.outSearch.emit(`${keySearch}`.trim());
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
// #region FUNCTIONS
|
|
50
|
+
handlerValueChange(keySearch) {
|
|
51
|
+
this.outValueChange.emit(keySearch.toString());
|
|
52
|
+
this.valueSearch.set(keySearch);
|
|
53
|
+
this.searchingWhileEntering.set(false);
|
|
54
|
+
if (this.valueSearch()) {
|
|
55
|
+
this.onSearch.next(this.valueSearch());
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
clearTimeout(this.timeout());
|
|
59
|
+
this.timeout.set(setTimeout(() => {
|
|
60
|
+
if (!this.valueSearch() && !this.ignoreAutoComplete()) {
|
|
61
|
+
this.outSearch.emit(this.valueSearch());
|
|
62
|
+
}
|
|
63
|
+
}, this.debounceTime() / 2));
|
|
64
|
+
}
|
|
65
|
+
handlerEnterInput(e) {
|
|
66
|
+
this.valueSearch.set(e.target.value);
|
|
67
|
+
this.searchingWhileEntering.set(true);
|
|
68
|
+
this.onEnter.next(this.valueSearch());
|
|
69
|
+
}
|
|
70
|
+
handlerEventIconLeft(eventName) {
|
|
71
|
+
this.outIconLeft.emit(eventName);
|
|
72
|
+
}
|
|
73
|
+
handlerEventIconRight(eventName) {
|
|
74
|
+
if (this.searchConfig()?.hasClearSearch) {
|
|
75
|
+
this.valueSearch.set('');
|
|
76
|
+
this.outSearch.emit(this.valueSearch());
|
|
77
|
+
}
|
|
78
|
+
this.outIconRight.emit(eventName);
|
|
79
|
+
}
|
|
80
|
+
handlerFunctionControl(event) {
|
|
81
|
+
this.outFunctionsControl.emit(event);
|
|
82
|
+
this.inputFunctionControl.set(event);
|
|
83
|
+
}
|
|
84
|
+
get FunctionsControl() {
|
|
85
|
+
return this.inputFunctionControl();
|
|
86
|
+
}
|
|
87
|
+
handlerFocusAndBlur(event) {
|
|
88
|
+
this.outFocusAndBlur.emit(event);
|
|
89
|
+
}
|
|
90
|
+
ngOnDestroy() {
|
|
91
|
+
clearTimeout(this.timeout());
|
|
92
|
+
this.onDestroy.next();
|
|
93
|
+
this.onDestroy.complete();
|
|
94
|
+
}
|
|
95
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: LibsUiComponentsInputsSearchComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
96
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.2.14", type: LibsUiComponentsInputsSearchComponent, isStandalone: true, selector: "libs_ui-components-inputs-search", inputs: { disable: { classPropertyName: "disable", publicName: "disable", isSignal: true, isRequired: false, transformFunction: null }, readonly: { classPropertyName: "readonly", publicName: "readonly", isSignal: true, isRequired: false, transformFunction: null }, searchConfig: { classPropertyName: "searchConfig", publicName: "searchConfig", isSignal: true, isRequired: false, transformFunction: null }, ignoreAutoComplete: { classPropertyName: "ignoreAutoComplete", publicName: "ignoreAutoComplete", isSignal: true, isRequired: false, transformFunction: null }, debounceTime: { classPropertyName: "debounceTime", publicName: "debounceTime", isSignal: true, isRequired: false, transformFunction: null }, ignoreStopPropagationEvent: { classPropertyName: "ignoreStopPropagationEvent", publicName: "ignoreStopPropagationEvent", isSignal: true, isRequired: false, transformFunction: null }, focusTimeOut: { classPropertyName: "focusTimeOut", publicName: "focusTimeOut", isSignal: true, isRequired: false, transformFunction: null }, blurTimeOut: { classPropertyName: "blurTimeOut", publicName: "blurTimeOut", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { outSearch: "outSearch", outValueChange: "outValueChange", outIconLeft: "outIconLeft", outIconRight: "outIconRight", outFocusAndBlur: "outFocusAndBlur", outFunctionsControl: "outFunctionsControl" }, ngImport: i0, template: "@let constHtmlPlaceholder = searchConfig().placeholder || 'i18n_search';\n<libs_ui-components-inputs-input\n [disable]=\"disable()\"\n [readonly]=\"readonly()\"\n [ignoreStopPropagationEvent]=\"ignoreStopPropagationEvent()\"\n [defaultHeight]=\"searchConfig().defaultHeight || 32\"\n [classInclude]=\"'w-full ' + (searchConfig().classInclude ? searchConfig().classInclude : '')\"\n [iconLeftClass]=\"searchConfig().iconLeftClass ?? 'libs-ui-icon-search'\"\n [iconRightClass]=\"(searchConfig().hasClearSearch && valueSearch() ? 'libs-ui-icon-close-circle-solid cursor-pointer ' : '') + (searchConfig().iconRightClass ? ' ' + searchConfig().iconRightClass : '')\"\n [setIconRightColorSameColorDisableReadOnly]=\"searchConfig().hasClearSearch && valueSearch() ? true : false\"\n [value]=\"searchConfig().value ?? this.valueSearch()\"\n [placeholder]=\"constHtmlPlaceholder | translate\"\n [noBorder]=\"searchConfig().noBorder || false\"\n [backgroundNone]=\"searchConfig().backgroundNone || false\"\n [classContainerInput]=\"searchConfig().classContainerInput || ''\"\n [popoverContentIconRight]=\"searchConfig().popoverContentIconRight || ''\"\n [focusTimeOut]=\"focusTimeOut()\"\n [blurTimeOut]=\"blurTimeOut()\"\n (outChange)=\"handlerValueChange($event)\"\n (outIconLeft)=\"handlerEventIconLeft($event)\"\n (outIconRight)=\"handlerEventIconRight($event)\"\n (outFunctionsControl)=\"handlerFunctionControl($event)\"\n (outEnterEvent)=\"handlerEnterInput($event)\"\n (outFocusAndBlurEvent)=\"handlerFocusAndBlur($event)\" />\n", dependencies: [{ kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }, { kind: "component", type: LibsUiComponentsInputsInputComponent, selector: "libs_ui-components-inputs-input", inputs: ["tagInput", "dataType", "typeInput", "modeInput", "tabInsertContentTagInput", "textAreaEnterNotNewLine", "emitEmptyInDataTypeNumber", "keepZeroInTypeInt", "autoAddZeroLessThan10InTypeInt", "ignoreBlockInputMaxValue", "maxValueNumber", "minValueNumber", "fixedFloat", "acceptNegativeValue", "valueUpDownNumber", "classInclude", "maxLength", "readonly", "disable", "noBorder", "backgroundNone", "borderError", "useColorModeExist", "placeholder", "keepPlaceholderOnly", "value", "autoRemoveEmoji", "defaultHeight", "minHeightTextArea", "maxHeightTextArea", "focusTimeOut", "selectAllTimeOut", "blurTimeOut", "zIndexPopoverContent", "classContainerInput", "showCount", "ignoreStopPropagationEvent", "resize", "templateLeftBottomInput", "templateRightBottomInput", "classContainerBottomInput", "ignoreWidthInput100", "iframeTextareaCustomStyle", "iconLeftClass", "popoverContentIconLeft", "iconRightClass", "popoverContentIconRight", "resetAutoCompletePassword", "acceptOnlyClickIcon", "setIconRightColorSameColorDisableReadOnly", "onlyAcceptNegativeValue", "maxLengthNumberCount", "focusInput"], outputs: ["maxValueNumberChange", "minValueNumberChange", "fixedFloatChange", "acceptNegativeValueChange", "maxLengthChange", "valueChange", "maxLengthNumberCountChange", "outHeightAreaChange", "outChange", "outFocusAndBlurEvent", "outEnterEvent", "outInputEvent", "outIconLeft", "outIconRight", "outFunctionsControl", "outFilesDrop", "outFileDrop", "outChangeValueByButtonUpDown"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
97
|
+
}
|
|
98
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: LibsUiComponentsInputsSearchComponent, decorators: [{
|
|
99
|
+
type: Component,
|
|
100
|
+
args: [{ selector: 'libs_ui-components-inputs-search', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [TranslateModule, LibsUiComponentsInputsInputComponent], template: "@let constHtmlPlaceholder = searchConfig().placeholder || 'i18n_search';\n<libs_ui-components-inputs-input\n [disable]=\"disable()\"\n [readonly]=\"readonly()\"\n [ignoreStopPropagationEvent]=\"ignoreStopPropagationEvent()\"\n [defaultHeight]=\"searchConfig().defaultHeight || 32\"\n [classInclude]=\"'w-full ' + (searchConfig().classInclude ? searchConfig().classInclude : '')\"\n [iconLeftClass]=\"searchConfig().iconLeftClass ?? 'libs-ui-icon-search'\"\n [iconRightClass]=\"(searchConfig().hasClearSearch && valueSearch() ? 'libs-ui-icon-close-circle-solid cursor-pointer ' : '') + (searchConfig().iconRightClass ? ' ' + searchConfig().iconRightClass : '')\"\n [setIconRightColorSameColorDisableReadOnly]=\"searchConfig().hasClearSearch && valueSearch() ? true : false\"\n [value]=\"searchConfig().value ?? this.valueSearch()\"\n [placeholder]=\"constHtmlPlaceholder | translate\"\n [noBorder]=\"searchConfig().noBorder || false\"\n [backgroundNone]=\"searchConfig().backgroundNone || false\"\n [classContainerInput]=\"searchConfig().classContainerInput || ''\"\n [popoverContentIconRight]=\"searchConfig().popoverContentIconRight || ''\"\n [focusTimeOut]=\"focusTimeOut()\"\n [blurTimeOut]=\"blurTimeOut()\"\n (outChange)=\"handlerValueChange($event)\"\n (outIconLeft)=\"handlerEventIconLeft($event)\"\n (outIconRight)=\"handlerEventIconRight($event)\"\n (outFunctionsControl)=\"handlerFunctionControl($event)\"\n (outEnterEvent)=\"handlerEnterInput($event)\"\n (outFocusAndBlurEvent)=\"handlerFocusAndBlur($event)\" />\n" }]
|
|
101
|
+
}] });
|
|
102
|
+
|
|
103
|
+
/**
|
|
104
|
+
* Generated bundle index. Do not edit.
|
|
105
|
+
*/
|
|
106
|
+
|
|
107
|
+
export { LibsUiComponentsInputsSearchComponent };
|
|
108
|
+
//# sourceMappingURL=libs-ui-components-inputs-search.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"libs-ui-components-inputs-search.mjs","sources":["../../../../../../libs-ui/components/inputs/search/src/search.component.ts","../../../../../../libs-ui/components/inputs/search/src/search.component.html","../../../../../../libs-ui/components/inputs/search/src/libs-ui-components-inputs-search.ts"],"sourcesContent":["import { ChangeDetectionStrategy, Component, OnDestroy, OnInit, input, output, signal } from '@angular/core';\nimport { IFocusAndBlurEvent, IInputFunctionControlEvent, LibsUiComponentsInputsInputComponent } from '@libs-ui/components-inputs-input';\nimport { IEvent } from '@libs-ui/interfaces-types';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { Subject } from 'rxjs';\nimport { debounceTime, filter, takeUntil, throttleTime } from 'rxjs/operators';\nimport { IInputSearchConfig } from './interfaces/config.interface';\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'libs_ui-components-inputs-search',\n templateUrl: './search.component.html',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [TranslateModule, LibsUiComponentsInputsInputComponent],\n})\nexport class LibsUiComponentsInputsSearchComponent implements OnInit, OnDestroy {\n // #region PROPERTY\n protected valueSearch = signal<string>('');\n\n private inputFunctionControl = signal<IInputFunctionControlEvent | undefined>(undefined);\n private onDestroy = new Subject<void>();\n private onSearch: Subject<string> = new Subject();\n private onEnter: Subject<string> = new Subject();\n private timeout = signal<number>(0);\n private searchingWhileEntering = signal<boolean>(false);\n\n // #region INPUT\n readonly disable = input<boolean>(false);\n readonly readonly = input<boolean>(false);\n readonly searchConfig = input<IInputSearchConfig, IInputSearchConfig>({}, { transform: (value) => value || {} });\n readonly ignoreAutoComplete = input<boolean>(); // không emit sự kiện sau 1 khoảng thời gian người dùng ngừng nhập\n readonly debounceTime = input<number, number>(1000, { transform: (value) => value ?? 1000 });\n readonly ignoreStopPropagationEvent = input<boolean>(false);\n readonly focusTimeOut = input<number, number>(600, { transform: (value) => value ?? 600 });\n readonly blurTimeOut = input<number, number>(600, { transform: (value) => value ?? 600 });\n\n // #region OUTPUT\n readonly outSearch = output<string>(); // sau 1 khoảng thời gian người dùng ngừng nhập sẽ emit sự kiện\n readonly outValueChange = output<string>(); // sử dụng khi muốn lắng nghe mỗi lần gõ text\n readonly outIconLeft = output<string>();\n readonly outIconRight = output<string>();\n readonly outFocusAndBlur = output<IFocusAndBlurEvent>();\n readonly outFunctionsControl = output<IInputFunctionControlEvent>();\n\n ngOnInit(): void {\n this.valueSearch.set(this.searchConfig()?.value || '');\n this.onSearch\n .pipe(\n debounceTime(this.debounceTime()),\n filter((keySearch) => !!keySearch),\n takeUntil(this.onDestroy)\n )\n .subscribe((keySearch) => {\n if (this.searchingWhileEntering() || this.ignoreAutoComplete() || !this.valueSearch()) {\n this.searchingWhileEntering.set(false);\n\n return;\n }\n this.outSearch.emit(`${keySearch}`.trim());\n });\n this.onEnter.pipe(throttleTime(this.debounceTime()), takeUntil(this.onDestroy)).subscribe((keySearch) => {\n this.outSearch.emit(`${keySearch}`.trim());\n });\n }\n\n // #region FUNCTIONS\n protected handlerValueChange(keySearch: string) {\n this.outValueChange.emit(keySearch.toString());\n this.valueSearch.set(keySearch as string);\n this.searchingWhileEntering.set(false);\n if (this.valueSearch()) {\n this.onSearch.next(this.valueSearch());\n return;\n }\n\n clearTimeout(this.timeout());\n this.timeout.set(\n setTimeout(() => {\n if (!this.valueSearch() && !this.ignoreAutoComplete()) {\n this.outSearch.emit(this.valueSearch());\n }\n }, this.debounceTime() / 2)\n );\n }\n\n protected handlerEnterInput(e: IEvent) {\n this.valueSearch.set(e.target.value);\n this.searchingWhileEntering.set(true);\n this.onEnter.next(this.valueSearch());\n }\n\n protected handlerEventIconLeft(eventName: string) {\n this.outIconLeft.emit(eventName);\n }\n\n protected handlerEventIconRight(eventName: string) {\n if (this.searchConfig()?.hasClearSearch) {\n this.valueSearch.set('');\n this.outSearch.emit(this.valueSearch());\n }\n this.outIconRight.emit(eventName);\n }\n\n protected handlerFunctionControl(event: IInputFunctionControlEvent) {\n this.outFunctionsControl.emit(event);\n this.inputFunctionControl.set(event);\n }\n\n public get FunctionsControl(): IInputFunctionControlEvent | undefined {\n return this.inputFunctionControl();\n }\n\n protected handlerFocusAndBlur(event: IFocusAndBlurEvent) {\n this.outFocusAndBlur.emit(event);\n }\n\n ngOnDestroy(): void {\n clearTimeout(this.timeout());\n this.onDestroy.next();\n this.onDestroy.complete();\n }\n}\n","@let constHtmlPlaceholder = searchConfig().placeholder || 'i18n_search';\n<libs_ui-components-inputs-input\n [disable]=\"disable()\"\n [readonly]=\"readonly()\"\n [ignoreStopPropagationEvent]=\"ignoreStopPropagationEvent()\"\n [defaultHeight]=\"searchConfig().defaultHeight || 32\"\n [classInclude]=\"'w-full ' + (searchConfig().classInclude ? searchConfig().classInclude : '')\"\n [iconLeftClass]=\"searchConfig().iconLeftClass ?? 'libs-ui-icon-search'\"\n [iconRightClass]=\"(searchConfig().hasClearSearch && valueSearch() ? 'libs-ui-icon-close-circle-solid cursor-pointer ' : '') + (searchConfig().iconRightClass ? ' ' + searchConfig().iconRightClass : '')\"\n [setIconRightColorSameColorDisableReadOnly]=\"searchConfig().hasClearSearch && valueSearch() ? true : false\"\n [value]=\"searchConfig().value ?? this.valueSearch()\"\n [placeholder]=\"constHtmlPlaceholder | translate\"\n [noBorder]=\"searchConfig().noBorder || false\"\n [backgroundNone]=\"searchConfig().backgroundNone || false\"\n [classContainerInput]=\"searchConfig().classContainerInput || ''\"\n [popoverContentIconRight]=\"searchConfig().popoverContentIconRight || ''\"\n [focusTimeOut]=\"focusTimeOut()\"\n [blurTimeOut]=\"blurTimeOut()\"\n (outChange)=\"handlerValueChange($event)\"\n (outIconLeft)=\"handlerEventIconLeft($event)\"\n (outIconRight)=\"handlerEventIconRight($event)\"\n (outFunctionsControl)=\"handlerFunctionControl($event)\"\n (outEnterEvent)=\"handlerEnterInput($event)\"\n (outFocusAndBlurEvent)=\"handlerFocusAndBlur($event)\" />\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;;;MAgBa,qCAAqC,CAAA;;AAEtC,IAAA,WAAW,GAAG,MAAM,CAAS,EAAE,CAAC;AAElC,IAAA,oBAAoB,GAAG,MAAM,CAAyC,SAAS,CAAC;AAChF,IAAA,SAAS,GAAG,IAAI,OAAO,EAAQ;AAC/B,IAAA,QAAQ,GAAoB,IAAI,OAAO,EAAE;AACzC,IAAA,OAAO,GAAoB,IAAI,OAAO,EAAE;AACxC,IAAA,OAAO,GAAG,MAAM,CAAS,CAAC,CAAC;AAC3B,IAAA,sBAAsB,GAAG,MAAM,CAAU,KAAK,CAAC;;AAG9C,IAAA,OAAO,GAAG,KAAK,CAAU,KAAK,CAAC;AAC/B,IAAA,QAAQ,GAAG,KAAK,CAAU,KAAK,CAAC;AAChC,IAAA,YAAY,GAAG,KAAK,CAAyC,EAAE,EAAE,EAAE,SAAS,EAAE,CAAC,KAAK,KAAK,KAAK,IAAI,EAAE,EAAE,CAAC;AACvG,IAAA,kBAAkB,GAAG,KAAK,EAAW,CAAC;AACtC,IAAA,YAAY,GAAG,KAAK,CAAiB,IAAI,EAAE,EAAE,SAAS,EAAE,CAAC,KAAK,KAAK,KAAK,IAAI,IAAI,EAAE,CAAC;AACnF,IAAA,0BAA0B,GAAG,KAAK,CAAU,KAAK,CAAC;AAClD,IAAA,YAAY,GAAG,KAAK,CAAiB,GAAG,EAAE,EAAE,SAAS,EAAE,CAAC,KAAK,KAAK,KAAK,IAAI,GAAG,EAAE,CAAC;AACjF,IAAA,WAAW,GAAG,KAAK,CAAiB,GAAG,EAAE,EAAE,SAAS,EAAE,CAAC,KAAK,KAAK,KAAK,IAAI,GAAG,EAAE,CAAC;;AAGhF,IAAA,SAAS,GAAG,MAAM,EAAU,CAAC;AAC7B,IAAA,cAAc,GAAG,MAAM,EAAU,CAAC;IAClC,WAAW,GAAG,MAAM,EAAU;IAC9B,YAAY,GAAG,MAAM,EAAU;IAC/B,eAAe,GAAG,MAAM,EAAsB;IAC9C,mBAAmB,GAAG,MAAM,EAA8B;IAEnE,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,KAAK,IAAI,EAAE,CAAC;AACtD,QAAA,IAAI,CAAC;aACF,IAAI,CACH,YAAY,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,EACjC,MAAM,CAAC,CAAC,SAAS,KAAK,CAAC,CAAC,SAAS,CAAC,EAClC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC;AAE1B,aAAA,SAAS,CAAC,CAAC,SAAS,KAAI;AACvB,YAAA,IAAI,IAAI,CAAC,sBAAsB,EAAE,IAAI,IAAI,CAAC,kBAAkB,EAAE,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE;AACrF,gBAAA,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,KAAK,CAAC;gBAEtC;YACF;AACA,YAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAA,EAAG,SAAS,CAAA,CAAE,CAAC,IAAI,EAAE,CAAC;AAC5C,QAAA,CAAC,CAAC;QACJ,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,EAAE,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,SAAS,KAAI;AACtG,YAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAA,EAAG,SAAS,CAAA,CAAE,CAAC,IAAI,EAAE,CAAC;AAC5C,QAAA,CAAC,CAAC;IACJ;;AAGU,IAAA,kBAAkB,CAAC,SAAiB,EAAA;QAC5C,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC;AAC9C,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,SAAmB,CAAC;AACzC,QAAA,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,KAAK,CAAC;AACtC,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE;YACtB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;YACtC;QACF;AAEA,QAAA,YAAY,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;QAC5B,IAAI,CAAC,OAAO,CAAC,GAAG,CACd,UAAU,CAAC,MAAK;AACd,YAAA,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,EAAE;gBACrD,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;YACzC;QACF,CAAC,EAAE,IAAI,CAAC,YAAY,EAAE,GAAG,CAAC,CAAC,CAC5B;IACH;AAEU,IAAA,iBAAiB,CAAC,CAAS,EAAA;QACnC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;AACpC,QAAA,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,IAAI,CAAC;QACrC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;IACvC;AAEU,IAAA,oBAAoB,CAAC,SAAiB,EAAA;AAC9C,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC;IAClC;AAEU,IAAA,qBAAqB,CAAC,SAAiB,EAAA;AAC/C,QAAA,IAAI,IAAI,CAAC,YAAY,EAAE,EAAE,cAAc,EAAE;AACvC,YAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC;YACxB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;QACzC;AACA,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC;IACnC;AAEU,IAAA,sBAAsB,CAAC,KAAiC,EAAA;AAChE,QAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,KAAK,CAAC;AACpC,QAAA,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,KAAK,CAAC;IACtC;AAEA,IAAA,IAAW,gBAAgB,GAAA;AACzB,QAAA,OAAO,IAAI,CAAC,oBAAoB,EAAE;IACpC;AAEU,IAAA,mBAAmB,CAAC,KAAyB,EAAA;AACrD,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC;IAClC;IAEA,WAAW,GAAA;AACT,QAAA,YAAY,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;AAC5B,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE;AACrB,QAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE;IAC3B;wGAzGW,qCAAqC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAArC,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,qCAAqC,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,kCAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,kBAAA,EAAA,EAAA,iBAAA,EAAA,oBAAA,EAAA,UAAA,EAAA,oBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,0BAAA,EAAA,EAAA,iBAAA,EAAA,4BAAA,EAAA,UAAA,EAAA,4BAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,SAAA,EAAA,WAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,WAAA,EAAA,aAAA,EAAA,YAAA,EAAA,cAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,qBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EChBlD,6gDAwBA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDVY,eAAe,4FAAE,oCAAoC,EAAA,QAAA,EAAA,iCAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,UAAA,EAAA,WAAA,EAAA,WAAA,EAAA,0BAAA,EAAA,yBAAA,EAAA,2BAAA,EAAA,mBAAA,EAAA,gCAAA,EAAA,0BAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,YAAA,EAAA,qBAAA,EAAA,mBAAA,EAAA,cAAA,EAAA,WAAA,EAAA,UAAA,EAAA,SAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,aAAA,EAAA,mBAAA,EAAA,aAAA,EAAA,qBAAA,EAAA,OAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,mBAAA,EAAA,mBAAA,EAAA,cAAA,EAAA,kBAAA,EAAA,aAAA,EAAA,sBAAA,EAAA,qBAAA,EAAA,WAAA,EAAA,4BAAA,EAAA,QAAA,EAAA,yBAAA,EAAA,0BAAA,EAAA,2BAAA,EAAA,qBAAA,EAAA,2BAAA,EAAA,eAAA,EAAA,wBAAA,EAAA,gBAAA,EAAA,yBAAA,EAAA,2BAAA,EAAA,qBAAA,EAAA,2CAAA,EAAA,yBAAA,EAAA,sBAAA,EAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAA,sBAAA,EAAA,sBAAA,EAAA,kBAAA,EAAA,2BAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,4BAAA,EAAA,qBAAA,EAAA,WAAA,EAAA,sBAAA,EAAA,eAAA,EAAA,eAAA,EAAA,aAAA,EAAA,cAAA,EAAA,qBAAA,EAAA,cAAA,EAAA,aAAA,EAAA,8BAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;4FAEpD,qCAAqC,EAAA,UAAA,EAAA,CAAA;kBARjD,SAAS;+BAEE,kCAAkC,EAAA,UAAA,EAEhC,IAAI,EAAA,eAAA,EACC,uBAAuB,CAAC,MAAM,EAAA,OAAA,EACtC,CAAC,eAAe,EAAE,oCAAoC,CAAC,EAAA,QAAA,EAAA,6gDAAA,EAAA;;;AEdlE;;AAEG;;;;"}
|
package/index.d.ts
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export interface IInputSearchConfig {
|
|
2
|
+
classInclude?: string;
|
|
3
|
+
classContainerInput?: string;
|
|
4
|
+
placeholder?: string;
|
|
5
|
+
value?: string;
|
|
6
|
+
noBorder?: boolean;
|
|
7
|
+
backgroundNone?: boolean;
|
|
8
|
+
iconLeftClass?: string;
|
|
9
|
+
iconRightClass?: string;
|
|
10
|
+
defaultHeight?: number;
|
|
11
|
+
classCoverInputSearch?: string;
|
|
12
|
+
hasClearSearch?: boolean;
|
|
13
|
+
popoverContentIconRight?: string;
|
|
14
|
+
}
|
package/package.json
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@libs-ui/components-inputs-search",
|
|
3
|
+
"version": "0.1.1-1",
|
|
4
|
+
"peerDependencies": {
|
|
5
|
+
"@angular/core": ">=18.0.0",
|
|
6
|
+
"@libs-ui/components-inputs-input": "0.1.1-1",
|
|
7
|
+
"@libs-ui/interfaces-types": "0.1.1-1",
|
|
8
|
+
"@ngx-translate/core": "^15.0.0",
|
|
9
|
+
"rxjs": "~7.8.0"
|
|
10
|
+
},
|
|
11
|
+
"sideEffects": false,
|
|
12
|
+
"module": "fesm2022/libs-ui-components-inputs-search.mjs",
|
|
13
|
+
"typings": "index.d.ts",
|
|
14
|
+
"exports": {
|
|
15
|
+
"./package.json": {
|
|
16
|
+
"default": "./package.json"
|
|
17
|
+
},
|
|
18
|
+
".": {
|
|
19
|
+
"types": "./index.d.ts",
|
|
20
|
+
"esm2022": "./esm2022/libs-ui-components-inputs-search.mjs",
|
|
21
|
+
"esm": "./esm2022/libs-ui-components-inputs-search.mjs",
|
|
22
|
+
"default": "./fesm2022/libs-ui-components-inputs-search.mjs"
|
|
23
|
+
}
|
|
24
|
+
},
|
|
25
|
+
"dependencies": {
|
|
26
|
+
"tslib": "^2.3.0"
|
|
27
|
+
}
|
|
28
|
+
}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { OnDestroy, OnInit } from '@angular/core';
|
|
2
|
+
import { IFocusAndBlurEvent, IInputFunctionControlEvent } from '@libs-ui/components-inputs-input';
|
|
3
|
+
import { IEvent } from '@libs-ui/interfaces-types';
|
|
4
|
+
import { IInputSearchConfig } from './interfaces/config.interface';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
export declare class LibsUiComponentsInputsSearchComponent implements OnInit, OnDestroy {
|
|
7
|
+
protected valueSearch: import("@angular/core").WritableSignal<string>;
|
|
8
|
+
private inputFunctionControl;
|
|
9
|
+
private onDestroy;
|
|
10
|
+
private onSearch;
|
|
11
|
+
private onEnter;
|
|
12
|
+
private timeout;
|
|
13
|
+
private searchingWhileEntering;
|
|
14
|
+
readonly disable: import("@angular/core").InputSignal<boolean>;
|
|
15
|
+
readonly readonly: import("@angular/core").InputSignal<boolean>;
|
|
16
|
+
readonly searchConfig: import("@angular/core").InputSignalWithTransform<IInputSearchConfig, IInputSearchConfig>;
|
|
17
|
+
readonly ignoreAutoComplete: import("@angular/core").InputSignal<boolean | undefined>;
|
|
18
|
+
readonly debounceTime: import("@angular/core").InputSignalWithTransform<number, number>;
|
|
19
|
+
readonly ignoreStopPropagationEvent: import("@angular/core").InputSignal<boolean>;
|
|
20
|
+
readonly focusTimeOut: import("@angular/core").InputSignalWithTransform<number, number>;
|
|
21
|
+
readonly blurTimeOut: import("@angular/core").InputSignalWithTransform<number, number>;
|
|
22
|
+
readonly outSearch: import("@angular/core").OutputEmitterRef<string>;
|
|
23
|
+
readonly outValueChange: import("@angular/core").OutputEmitterRef<string>;
|
|
24
|
+
readonly outIconLeft: import("@angular/core").OutputEmitterRef<string>;
|
|
25
|
+
readonly outIconRight: import("@angular/core").OutputEmitterRef<string>;
|
|
26
|
+
readonly outFocusAndBlur: import("@angular/core").OutputEmitterRef<IFocusAndBlurEvent>;
|
|
27
|
+
readonly outFunctionsControl: import("@angular/core").OutputEmitterRef<IInputFunctionControlEvent>;
|
|
28
|
+
ngOnInit(): void;
|
|
29
|
+
protected handlerValueChange(keySearch: string): void;
|
|
30
|
+
protected handlerEnterInput(e: IEvent): void;
|
|
31
|
+
protected handlerEventIconLeft(eventName: string): void;
|
|
32
|
+
protected handlerEventIconRight(eventName: string): void;
|
|
33
|
+
protected handlerFunctionControl(event: IInputFunctionControlEvent): void;
|
|
34
|
+
get FunctionsControl(): IInputFunctionControlEvent | undefined;
|
|
35
|
+
protected handlerFocusAndBlur(event: IFocusAndBlurEvent): void;
|
|
36
|
+
ngOnDestroy(): void;
|
|
37
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<LibsUiComponentsInputsSearchComponent, never>;
|
|
38
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<LibsUiComponentsInputsSearchComponent, "libs_ui-components-inputs-search", never, { "disable": { "alias": "disable"; "required": false; "isSignal": true; }; "readonly": { "alias": "readonly"; "required": false; "isSignal": true; }; "searchConfig": { "alias": "searchConfig"; "required": false; "isSignal": true; }; "ignoreAutoComplete": { "alias": "ignoreAutoComplete"; "required": false; "isSignal": true; }; "debounceTime": { "alias": "debounceTime"; "required": false; "isSignal": true; }; "ignoreStopPropagationEvent": { "alias": "ignoreStopPropagationEvent"; "required": false; "isSignal": true; }; "focusTimeOut": { "alias": "focusTimeOut"; "required": false; "isSignal": true; }; "blurTimeOut": { "alias": "blurTimeOut"; "required": false; "isSignal": true; }; }, { "outSearch": "outSearch"; "outValueChange": "outValueChange"; "outIconLeft": "outIconLeft"; "outIconRight": "outIconRight"; "outFocusAndBlur": "outFocusAndBlur"; "outFunctionsControl": "outFunctionsControl"; }, never, never, true, never>;
|
|
39
|
+
}
|