ecabs-components 1.1.55 → 1.1.57

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 (54) hide show
  1. package/README.md +2 -0
  2. package/esm2022/lib/base/consts/error-messages.consts.mjs +13 -1
  3. package/esm2022/lib/base/element-wrapper/element-wrapper.component.mjs +3 -3
  4. package/esm2022/lib/base/models/phone.models.mjs +1 -1
  5. package/esm2022/lib/base/models/select.models.mjs +1 -1
  6. package/esm2022/lib/base/models/sidebar.models.mjs +1 -1
  7. package/esm2022/lib/base/pipes/phone-number-country-code.pipe.mjs +31 -0
  8. package/esm2022/lib/base/pipes/truncate.pipe.mjs +14 -4
  9. package/esm2022/lib/base/utils/object-utils.mjs +9 -1
  10. package/esm2022/lib/ecabs-button-toggle/ecabs-button-toggle.component.mjs +4 -4
  11. package/esm2022/lib/ecabs-buttons-v2/ecabs-buttons-v2.component.mjs +3 -3
  12. package/esm2022/lib/ecabs-checkbox-toggle/ecabs-checkbox-toggle.component.mjs +2 -2
  13. package/esm2022/lib/ecabs-chip-autocomplete/ecabs-chip-autocomplete.component.mjs +197 -0
  14. package/esm2022/lib/ecabs-chip-group/ecabs-chip-group.component.mjs +61 -0
  15. package/esm2022/lib/ecabs-chip-group/ecabs-chip-group.module.mjs +20 -0
  16. package/esm2022/lib/ecabs-date-range-picker/ecabs-date-range-picker.component.mjs +2 -2
  17. package/esm2022/lib/ecabs-date-range-picker-v2/components/ecabs-date-range-picker-header/ecabs-date-range-picker-header-v2.component.mjs +21 -0
  18. package/esm2022/lib/ecabs-date-range-picker-v2/ecabs-date-range-picker-v2.component.mjs +259 -0
  19. package/esm2022/lib/ecabs-date-range-picker-v2/ecabs-date-range-picker-v2.module.mjs +76 -0
  20. package/esm2022/lib/ecabs-dialog-message/ecabs-dialog-message.component.mjs +2 -2
  21. package/esm2022/lib/ecabs-increment/ecabs-increment.component.mjs +2 -2
  22. package/esm2022/lib/ecabs-language-selector/ecabs-language-selector.component.mjs +2 -2
  23. package/esm2022/lib/ecabs-menu-items/ecabs-menu-items.component.mjs +3 -3
  24. package/esm2022/lib/ecabs-multiple-dates-picker/ecabs-multiple-dates-picker.component.mjs +2 -2
  25. package/esm2022/lib/ecabs-note/ecabs-note.component.mjs +2 -2
  26. package/esm2022/lib/ecabs-picker-header/ecabs-picker-header.component.mjs +2 -2
  27. package/esm2022/lib/ecabs-table/ecabs-table-filter-wrapper/ecabs-table-filter-wrapper.component.mjs +2 -2
  28. package/esm2022/public-api.mjs +8 -1
  29. package/fesm2022/ecabs-components.mjs +661 -41
  30. package/fesm2022/ecabs-components.mjs.map +1 -1
  31. package/lib/base/models/phone.models.d.ts +1 -0
  32. package/lib/base/models/select.models.d.ts +2 -2
  33. package/lib/base/models/sidebar.models.d.ts +1 -1
  34. package/lib/base/pipes/phone-number-country-code.pipe.d.ts +8 -0
  35. package/lib/base/utils/object-utils.d.ts +1 -0
  36. package/lib/ecabs-button-toggle/ecabs-button-toggle.component.d.ts +9 -10
  37. package/lib/ecabs-chip-autocomplete/ecabs-chip-autocomplete.component.d.ts +50 -0
  38. package/lib/ecabs-chip-group/ecabs-chip-group.component.d.ts +21 -0
  39. package/lib/ecabs-chip-group/ecabs-chip-group.module.d.ts +10 -0
  40. package/lib/ecabs-date-range-picker-v2/components/ecabs-date-range-picker-header/ecabs-date-range-picker-header-v2.component.d.ts +9 -0
  41. package/lib/ecabs-date-range-picker-v2/ecabs-date-range-picker-v2.component.d.ts +71 -0
  42. package/lib/ecabs-date-range-picker-v2/ecabs-date-range-picker-v2.module.d.ts +21 -0
  43. package/package.json +2 -1
  44. package/public-api.d.ts +7 -0
  45. package/src/assets/styles/material/overrides/_autocomplete.scss +19 -0
  46. package/src/assets/styles/material/overrides/_chip.scss +80 -0
  47. package/src/assets/styles/material/overrides/_datepicker.scss +22 -0
  48. package/src/assets/styles/scss/modules/_autocomplete.scss +1 -1
  49. package/src/assets/styles/scss/modules/_chip.scss +7 -1
  50. package/src/assets/styles/scss/modules/_form.scss +78 -5
  51. package/src/assets/styles/scss/utilities/_colors.scss +3 -5
  52. package/src/assets/styles/scss/utilities/_fonts.scss +4 -0
  53. package/src/assets/styles/scss/utilities/_variables.scss +2 -0
  54. package/src/assets/styles/tailwind/index.scss +1 -1
@@ -8,3 +8,4 @@ export type Country = {
8
8
  flagClass: string;
9
9
  placeHolder?: string;
10
10
  };
11
+ export type PhoneNumberCodeType = 'iso' | 'calling';
@@ -1,5 +1,5 @@
1
- export interface SelectOption {
1
+ export interface SelectOption<T = unknown> {
2
2
  label: string;
3
- value: any;
3
+ value: T;
4
4
  disabled?: boolean;
5
5
  }
@@ -6,7 +6,7 @@ export interface SidebarMenuItem {
6
6
  subItems?: SidebarMenuItem[];
7
7
  permissions?: PermissionValueEnum<string>[];
8
8
  iconResource?: SidebarIconResource;
9
- badget?: string;
9
+ badge?: string;
10
10
  }
11
11
  type PermissionValueEnum<T extends string> = {
12
12
  values: Record<T, string>;
@@ -0,0 +1,8 @@
1
+ import { PipeTransform } from '@angular/core';
2
+ import { PhoneNumberCodeType } from '../models/phone.models';
3
+ import * as i0 from "@angular/core";
4
+ export declare class NumberToCountryCodePipe implements PipeTransform {
5
+ transform(phoneNumber: string | null, type?: PhoneNumberCodeType, withFlagClass?: boolean): string | null;
6
+ static ɵfac: i0.ɵɵFactoryDeclaration<NumberToCountryCodePipe, never>;
7
+ static ɵpipe: i0.ɵɵPipeDeclaration<NumberToCountryCodePipe, "numberToCountryCode", true>;
8
+ }
@@ -6,3 +6,4 @@ export interface Sorter<T> {
6
6
  export declare const sortGeneric: <T>(objX: T, objY: T, sortParams: Sorter<T>) => number;
7
7
  export declare const removeNullUndefineds: <T>(obj: any, exceptProperties?: string[]) => T;
8
8
  export declare const removeEmpty: <T>(o: any, exceptProperties?: string[]) => T;
9
+ export declare function getRandomItems<U>(items: U[], count: number): U[];
@@ -4,23 +4,22 @@ import { MatButtonToggleChange } from '@angular/material/button-toggle';
4
4
  import { SelectOption } from '../base/models/select.models';
5
5
  import * as i0 from "@angular/core";
6
6
  export type ButtonToggleSize = 'small' | 'medium' | 'large';
7
- export type ButtonToggleValue = SelectOption['value'] | SelectOption['value'][] | null;
8
- export declare class EcabsButtonToggleComponent implements ControlValueAccessor {
9
- options: SelectOption[];
7
+ export declare class EcabsButtonToggleComponent<T = unknown> implements ControlValueAccessor {
8
+ options: SelectOption<T>[];
10
9
  multiple: boolean;
11
10
  size: ButtonToggleSize;
12
- value: ButtonToggleValue;
13
- valueChange: EventEmitter<any>;
11
+ value: T | T[];
12
+ valueChange: EventEmitter<T | T[]>;
14
13
  isDisabled: boolean;
15
14
  private onChange;
16
15
  private onTouched;
17
16
  constructor();
18
17
  onGroupChange(event: MatButtonToggleChange): void;
19
- trackByOptionValue(index: number, option: SelectOption): SelectOption['value'];
20
- writeValue(value: ButtonToggleValue): void;
21
- registerOnChange(fn: (value: ButtonToggleValue) => void): void;
18
+ trackByOptionValue(index: number, option: SelectOption<T>): T | number;
19
+ writeValue(value: T | T[]): void;
20
+ registerOnChange(fn: (value: T | T[]) => void): void;
22
21
  registerOnTouched(fn: () => void): void;
23
22
  setDisabledState(isDisabled: boolean): void;
24
- static ɵfac: i0.ɵɵFactoryDeclaration<EcabsButtonToggleComponent, never>;
25
- static ɵcmp: i0.ɵɵComponentDeclaration<EcabsButtonToggleComponent, "ecabs-button-toggle", never, { "options": { "alias": "options"; "required": false; }; "multiple": { "alias": "multiple"; "required": false; }; "size": { "alias": "size"; "required": false; }; "value": { "alias": "value"; "required": false; }; }, { "valueChange": "valueChange"; }, never, never, false, never>;
23
+ static ɵfac: i0.ɵɵFactoryDeclaration<EcabsButtonToggleComponent<any>, never>;
24
+ static ɵcmp: i0.ɵɵComponentDeclaration<EcabsButtonToggleComponent<any>, "ecabs-button-toggle", never, { "options": { "alias": "options"; "required": false; }; "multiple": { "alias": "multiple"; "required": false; }; "size": { "alias": "size"; "required": false; }; "value": { "alias": "value"; "required": false; }; }, { "valueChange": "valueChange"; }, never, never, false, never>;
26
25
  }
@@ -0,0 +1,50 @@
1
+ import { EventEmitter, TemplateRef } from '@angular/core';
2
+ import { ControlValueAccessor, FormControl } from '@angular/forms';
3
+ import { SelectOption } from '../base/models/select.models';
4
+ import EcabsElementBaseComponent from '../base/element-base';
5
+ import { MatAutocompleteSelectedEvent } from '@angular/material/autocomplete';
6
+ import * as i0 from "@angular/core";
7
+ export declare class EcabsChipAutocompleteComponent<T = unknown> extends EcabsElementBaseComponent implements ControlValueAccessor {
8
+ private readonly document;
9
+ private readonly inputRef?;
10
+ visibleOptions: number;
11
+ autoActiveFirstOption: boolean;
12
+ noResultsText: string;
13
+ compareFn: (a: T, b: T) => boolean;
14
+ avatarTemplate: TemplateRef<{
15
+ $implicit: SelectOption<T>;
16
+ }> | null;
17
+ truncateAt: number;
18
+ set options(value: SelectOption<T>[] | null);
19
+ readonly selectionChange: EventEmitter<T[]>;
20
+ readonly termChange: EventEmitter<string>;
21
+ protected readonly inputControl: FormControl<string>;
22
+ private readonly normalizedTerm$;
23
+ private readonly _options;
24
+ private readonly _values;
25
+ private readonly _term;
26
+ private readonly destroyRef;
27
+ protected readonly overlayPanelClass = "ecabs-chip-autocomplete-overlay-panel";
28
+ protected readonly isDisabled: import("@angular/core").WritableSignal<boolean>;
29
+ protected readonly selectedOptions: import("@angular/core").Signal<SelectOption<T>[]>;
30
+ protected readonly filteredOptions: import("@angular/core").Signal<SelectOption<T>[]>;
31
+ protected readonly noMatchResult: import("@angular/core").Signal<boolean>;
32
+ get options(): SelectOption<T>[] | null;
33
+ constructor(document: Document);
34
+ setOverlayHeight(): void;
35
+ setSelection(event: MatAutocompleteSelectedEvent): void;
36
+ removeSelection(option: SelectOption<T>): void;
37
+ trackByFn(_index: number, option: SelectOption<T>): T | number;
38
+ writeValue(value: T[] | null): void;
39
+ registerOnChange(fn: typeof this.onChange): void;
40
+ registerOnTouched(fn: () => void): void;
41
+ blur(): void;
42
+ private onChange;
43
+ private onTouched;
44
+ private updateValues;
45
+ private clearAndRefocusInput;
46
+ private setValidSelectedOptions;
47
+ private setFilteredOptions;
48
+ static ɵfac: i0.ɵɵFactoryDeclaration<EcabsChipAutocompleteComponent<any>, never>;
49
+ static ɵcmp: i0.ɵɵComponentDeclaration<EcabsChipAutocompleteComponent<any>, "ecabs-chip-autocomplete", never, { "visibleOptions": { "alias": "visibleOptions"; "required": false; }; "autoActiveFirstOption": { "alias": "autoActiveFirstOption"; "required": false; }; "noResultsText": { "alias": "noResultsText"; "required": false; }; "compareFn": { "alias": "compareFn"; "required": false; }; "avatarTemplate": { "alias": "avatarTemplate"; "required": false; }; "truncateAt": { "alias": "truncateAt"; "required": false; }; "options": { "alias": "options"; "required": true; }; }, { "selectionChange": "selectionChange"; "termChange": "termChange"; }, never, never, true, never>;
50
+ }
@@ -0,0 +1,21 @@
1
+ import { EventEmitter } from '@angular/core';
2
+ import { ControlValueAccessor } from '@angular/forms';
3
+ import { SelectOption } from '../base/models/select.models';
4
+ import * as i0 from "@angular/core";
5
+ export declare class EcabsChipGroupComponent<T = unknown> implements ControlValueAccessor {
6
+ options: SelectOption<T>[];
7
+ multiple: boolean;
8
+ disableRipple: boolean;
9
+ selectedChange: EventEmitter<T | T[]>;
10
+ protected readonly _value: import("@angular/core").WritableSignal<T | T[]>;
11
+ protected readonly isDisabled: import("@angular/core").WritableSignal<boolean>;
12
+ chipValueChange(value: T | T[]): void;
13
+ writeValue(value: T | T[] | null): void;
14
+ registerOnChange(fn: typeof this.onChange): void;
15
+ registerOnTouched(fn: () => void): void;
16
+ setDisabledState(isDisabled: boolean): void;
17
+ private onChange;
18
+ private onTouched;
19
+ static ɵfac: i0.ɵɵFactoryDeclaration<EcabsChipGroupComponent<any>, never>;
20
+ static ɵcmp: i0.ɵɵComponentDeclaration<EcabsChipGroupComponent<any>, "ecabs-chip-group", never, { "options": { "alias": "options"; "required": false; }; "multiple": { "alias": "multiple"; "required": false; }; "disableRipple": { "alias": "disableRipple"; "required": false; }; }, { "selectedChange": "selectedChange"; }, never, never, false, never>;
21
+ }
@@ -0,0 +1,10 @@
1
+ import * as i0 from "@angular/core";
2
+ import * as i1 from "./ecabs-chip-group.component";
3
+ import * as i2 from "@angular/common";
4
+ import * as i3 from "@angular/material/chips";
5
+ import * as i4 from "@angular/forms";
6
+ export declare class EcabsChipGroupModule {
7
+ static ɵfac: i0.ɵɵFactoryDeclaration<EcabsChipGroupModule, never>;
8
+ static ɵmod: i0.ɵɵNgModuleDeclaration<EcabsChipGroupModule, [typeof i1.EcabsChipGroupComponent], [typeof i2.CommonModule, typeof i3.MatChipsModule, typeof i4.FormsModule], [typeof i1.EcabsChipGroupComponent]>;
9
+ static ɵinj: i0.ɵɵInjectorDeclaration<EcabsChipGroupModule>;
10
+ }
@@ -0,0 +1,9 @@
1
+ import { EcabsDatePickerHeaderService } from '../../../base/services/ecabs-date-picker-translations.service';
2
+ import * as i0 from "@angular/core";
3
+ export declare class EcabsDateRangePickerHeaderComponentV2 {
4
+ readonly ecabsDatePickerHeaderService: EcabsDatePickerHeaderService;
5
+ selectDateLabel: string;
6
+ constructor(ecabsDatePickerHeaderService: EcabsDatePickerHeaderService);
7
+ static ɵfac: i0.ɵɵFactoryDeclaration<EcabsDateRangePickerHeaderComponentV2, never>;
8
+ static ɵcmp: i0.ɵɵComponentDeclaration<EcabsDateRangePickerHeaderComponentV2, "ecabs-date-range-picker-header-v2", never, { "selectDateLabel": { "alias": "selectDateLabel"; "required": false; }; }, {}, never, never, false, never>;
9
+ }
@@ -0,0 +1,71 @@
1
+ import { AfterViewInit, EventEmitter, Injector, OnChanges, OnDestroy, OnInit, SimpleChanges } from '@angular/core';
2
+ import { ControlValueAccessor, UntypedFormControl } from '@angular/forms';
3
+ import { MatDateRangePicker } from '@angular/material/datepicker';
4
+ import EcabsElementBaseComponent from '../base/element-base';
5
+ import { EcabsDatePickerHolidayOptions, EcabsDatePickerTranslations } from '../base/models/ecabs-date-picker-translations.models';
6
+ import { EcabsDatePickerHeaderService } from '../base/services/ecabs-date-picker-translations.service';
7
+ import { UnsubscribeService } from '../base/services/unsubscribe.service';
8
+ import { EcabsDateRangePickerHeaderComponentV2 } from './components/ecabs-date-range-picker-header/ecabs-date-range-picker-header-v2.component';
9
+ import * as i0 from "@angular/core";
10
+ export declare class EcabsDateRangePickerComponentV2 extends EcabsElementBaseComponent implements ControlValueAccessor, AfterViewInit, OnInit, OnChanges, OnDestroy {
11
+ private readonly injector;
12
+ private readonly ecabsDatePickerHeaderService;
13
+ private readonly unsubscribeService;
14
+ minDate: Date;
15
+ maxDate: Date;
16
+ touchUi: boolean;
17
+ cancelLabel: string;
18
+ applyLabel: string;
19
+ startDatePlaceholder: string;
20
+ endDatePlaceholder: string;
21
+ separatorLabel: string;
22
+ excludeHolidays: boolean;
23
+ excludeWeekends: boolean;
24
+ specificDates: Date[];
25
+ holidayOptions: EcabsDatePickerHolidayOptions;
26
+ onblur: EventEmitter<any>;
27
+ val: {
28
+ dateFrom: string;
29
+ dateTo: string;
30
+ };
31
+ pickerTo: MatDateRangePicker<any> | undefined;
32
+ header: typeof EcabsDateRangePickerHeaderComponentV2;
33
+ _dateFrom: string;
34
+ _dateTo: string;
35
+ translationConfig: EcabsDatePickerTranslations;
36
+ minDateFrom?: Date;
37
+ maxDateFrom?: Date;
38
+ minDateTo?: Date;
39
+ maxDateTo?: Date;
40
+ protected readonly panelClass = "ecabs-date-range-picker-v2";
41
+ private holidayInstance;
42
+ get value(): {
43
+ dateFrom: string;
44
+ dateTo: string;
45
+ };
46
+ get dateFrom(): string;
47
+ get dateTo(): string;
48
+ set value(val: {
49
+ dateFrom: string;
50
+ dateTo: string;
51
+ });
52
+ set dateFrom(val: string);
53
+ set dateTo(val: string);
54
+ constructor(injector: Injector, ecabsDatePickerHeaderService: EcabsDatePickerHeaderService, unsubscribeService: UnsubscribeService);
55
+ ngOnChanges(changes: SimpleChanges): void;
56
+ ngOnInit(): void;
57
+ ngAfterViewInit(): void;
58
+ ngOnDestroy(): void;
59
+ onChange: any;
60
+ onTouch: any;
61
+ writeValue(value: any): void;
62
+ registerOnChange(fn: any): void;
63
+ registerOnTouched(fn: any): void;
64
+ blurChange(e: any): void;
65
+ onApply(): void;
66
+ filterDateRange: (date: Date) => boolean;
67
+ isDateNotHoliday(date: Date): boolean;
68
+ dateRangeValidator(control: UntypedFormControl): void;
69
+ static ɵfac: i0.ɵɵFactoryDeclaration<EcabsDateRangePickerComponentV2, never>;
70
+ static ɵcmp: i0.ɵɵComponentDeclaration<EcabsDateRangePickerComponentV2, "ecabs-date-range-picker-v2", never, { "minDate": { "alias": "minDate"; "required": false; }; "maxDate": { "alias": "maxDate"; "required": false; }; "touchUi": { "alias": "touchUi"; "required": false; }; "cancelLabel": { "alias": "cancelLabel"; "required": false; }; "applyLabel": { "alias": "applyLabel"; "required": false; }; "startDatePlaceholder": { "alias": "startDatePlaceholder"; "required": false; }; "endDatePlaceholder": { "alias": "endDatePlaceholder"; "required": false; }; "separatorLabel": { "alias": "separatorLabel"; "required": false; }; "excludeHolidays": { "alias": "excludeHolidays"; "required": false; }; "excludeWeekends": { "alias": "excludeWeekends"; "required": false; }; "specificDates": { "alias": "specificDates"; "required": false; }; "holidayOptions": { "alias": "holidayOptions"; "required": false; }; }, { "onblur": "onblur"; }, never, never, false, never>;
71
+ }
@@ -0,0 +1,21 @@
1
+ import * as i0 from "@angular/core";
2
+ import * as i1 from "./ecabs-date-range-picker-v2.component";
3
+ import * as i2 from "./components/ecabs-date-range-picker-header/ecabs-date-range-picker-header-v2.component";
4
+ import * as i3 from "@angular/common";
5
+ import * as i4 from "../base/element-wrapper/element-wrapper.module";
6
+ import * as i5 from "@angular/material/icon";
7
+ import * as i6 from "@angular/material/datepicker";
8
+ import * as i7 from "@angular/material/button";
9
+ import * as i8 from "@angular/forms";
10
+ import * as i9 from "../ecabs-picker-header/ecabs-picker-header.module";
11
+ import * as i10 from "../ecabs-buttons/ecabs-buttons.module";
12
+ import * as i11 from "../base/directives/digits-only.directive.module";
13
+ import * as i12 from "../base/directives/number-border.directive.module";
14
+ import * as i13 from "../base/directives/date-mask.directive.module";
15
+ import * as i14 from "@angular/material/input";
16
+ import * as i15 from "../ecabs-date-picker-actions/ecabs-date-picker-actions.module";
17
+ export declare class EcabsDateRangeModuleV2 {
18
+ static ɵfac: i0.ɵɵFactoryDeclaration<EcabsDateRangeModuleV2, never>;
19
+ static ɵmod: i0.ɵɵNgModuleDeclaration<EcabsDateRangeModuleV2, [typeof i1.EcabsDateRangePickerComponentV2, typeof i2.EcabsDateRangePickerHeaderComponentV2], [typeof i3.CommonModule, typeof i4.ElementWrapperModule, typeof i5.MatIconModule, typeof i6.MatDatepickerModule, typeof i7.MatButtonModule, typeof i8.FormsModule, typeof i8.ReactiveFormsModule, typeof i9.EcabsPickerHeaderModule, typeof i10.EcabsButtonsModule, typeof i11.EcabsDigitsOnlyDirectivesModule, typeof i12.EcabsNumberBorderDirectiveModule, typeof i13.EcabsMaskDateDirectiveModule, typeof i14.MatInputModule, typeof i15.EcabsDatePickerActionsModule], [typeof i1.EcabsDateRangePickerComponentV2, typeof i2.EcabsDateRangePickerHeaderComponentV2]>;
20
+ static ɵinj: i0.ɵɵInjectorDeclaration<EcabsDateRangeModuleV2>;
21
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ecabs-components",
3
- "version": "1.1.55",
3
+ "version": "1.1.57",
4
4
  "peerDependencies": {
5
5
  "@angular/animations": "^16.2.12",
6
6
  "@angular/common": "^16.2.12",
@@ -15,6 +15,7 @@
15
15
  "flag-icons": "^6.7.0",
16
16
  "libphonenumber-js": "^1.12.6",
17
17
  "ngx-mat-select-search": "^7.0.7",
18
+ "ngx-phosphor-icons": "^1.0.7",
18
19
  "postcss": "^8.4.35",
19
20
  "rxjs": "~7.5.0",
20
21
  "tailwindcss": "^3.4.13",
package/public-api.d.ts CHANGED
@@ -117,6 +117,7 @@ export * from './lib/ecabs-base-phone-input/ecabs-base-phone.module';
117
117
  export * from './lib/base/services/unsubscribe.service';
118
118
  export * from './lib/base/pipes/truncate.pipe';
119
119
  export * from './lib/base/pipes/separator-append.pipe';
120
+ export * from './lib/base/pipes/phone-number-country-code.pipe';
120
121
  export * from './lib/base/pipes/pipes.module';
121
122
  export * from './lib/ecabs-sidebar/ecabs-sidebar.module';
122
123
  export * from './lib/ecabs-sidebar/ecabs-sidebar.component';
@@ -137,3 +138,9 @@ export * from './lib/base/adapters/date.adapter';
137
138
  export * from './lib/base/consts/waypoint.consts';
138
139
  export * from './lib/ecabs-dialog-confirm-deletion/ecabs-dialog-confirm-deletion.module';
139
140
  export * from './lib/ecabs-dialog-confirm-deletion/ecabs-dialog-confirm-deletion.component';
141
+ export * from './lib/ecabs-chip-group/ecabs-chip-group.module';
142
+ export * from './lib/ecabs-chip-group/ecabs-chip-group.component';
143
+ export * from './lib/ecabs-chip-autocomplete/ecabs-chip-autocomplete.component';
144
+ export * from './lib/ecabs-date-range-picker-v2/ecabs-date-range-picker-v2.module';
145
+ export * from './lib/ecabs-date-range-picker-v2/ecabs-date-range-picker-v2.component';
146
+ export * from './lib/ecabs-date-range-picker-v2/components/ecabs-date-range-picker-header/ecabs-date-range-picker-header-v2.component';
@@ -9,3 +9,22 @@
9
9
  }
10
10
  }
11
11
  }
12
+
13
+ ecabs-chip-autocomplete {
14
+ input.mat-mdc-chip-input {
15
+ margin-left: unset;
16
+ border-radius: calc-rem($border-radius-large);
17
+ }
18
+ }
19
+
20
+ .ecabs-chip-autocomplete-overlay-panel {
21
+ &.mat-mdc-autocomplete-panel {
22
+ box-shadow: $box-shadow-default;
23
+ border-radius: calc-rem($border-radius-large);
24
+ border-top: 0;
25
+
26
+ max-height: calc((var(--autocomplete-visible-options, 8.5) * var(--mat-option-height, 48px)) + 10px);
27
+ overflow-y: auto;
28
+ overflow-x: hidden;
29
+ }
30
+ }
@@ -147,3 +147,83 @@
147
147
  .mdc-evolution-chip.mat-mdc-standard-chip[ng-reflect-disable-ripple]:not(.mdc-evolution-chip--disabled):active {
148
148
  box-shadow: none;
149
149
  }
150
+
151
+ //V2 styles
152
+ ecabs-chip-group {
153
+ .mat-mdc-chip-listbox {
154
+ display: flex;
155
+ flex-wrap: wrap;
156
+ gap: calc-rem(8px);
157
+
158
+ .mat-mdc-chip {
159
+ --mdc-chip-elevated-container-color: var(--color-white);
160
+ --mdc-chip-label-text-color: var(--color-gray-600);
161
+ --mdc-chip-label-text-size: #{$font-size-xs};
162
+ --mdc-chip-label-text-weight: #{$font-weight-medium};
163
+ --mdc-chip-elevated-selected-container-color: var(--color-brand-dark);
164
+ --mdc-chip-selected-label-text-color: var(--color-white);
165
+
166
+ border-radius: calc-rem($border-radius-medium);
167
+ border: 1px solid var(--color-gray-200);
168
+
169
+ &:hover {
170
+ border-color: var(--color-gray-300);
171
+ }
172
+ }
173
+
174
+ .mat-mdc-chip.mdc-evolution-chip--selected {
175
+ border-color: transparent;
176
+
177
+ .mdc-evolution-chip__action {
178
+ color: var(--mdc-chip-selected-label-text-color);
179
+ }
180
+ }
181
+
182
+ .mat-mdc-chip.mdc-evolution-chip--disabled {
183
+ opacity: 0.6;
184
+ cursor: not-allowed;
185
+ }
186
+
187
+ .mat-mdc-chip .mat-mdc-chip-graphic {
188
+ display: none;
189
+ }
190
+
191
+ .mat-mdc-standard-chip.mdc-evolution-chip--with-primary-graphic .mdc-evolution-chip__action--primary {
192
+ padding: 0;
193
+ }
194
+
195
+ .mat-mdc-chip .mdc-chip__ripple,
196
+ .mat-mdc-chip .mat-ripple {
197
+ display: none;
198
+ }
199
+ }
200
+ }
201
+
202
+ ecabs-chip-autocomplete {
203
+ .mat-mdc-chip-grid {
204
+ .mat-mdc-chip {
205
+ --mdc-chip-elevated-container-color: var(--color-gray-100);
206
+ --mdc-chip-label-text-color: var(--color-gray-600);
207
+ --mdc-chip-label-text-size: #{$font-size-xs};
208
+ --mdc-chip-label-text-weight: #{$font-weight-medium};
209
+ --mdc-chip-elevated-selected-container-color: var(--color-brand-dark);
210
+ --mdc-chip-selected-label-text-color: var(--color-white);
211
+ --mdc-chip-container-height: #{calc-rem(28px)};
212
+ --mdc-chip-with-trailing-icon-trailing-icon-color: var(--color-gray-600);
213
+ --mdc-chip-with-avatar-avatar-shape-radius: 0;
214
+
215
+ border-radius: calc-rem($border-radius-medium);
216
+ padding-left: unset;
217
+ padding-right: unset;
218
+ }
219
+ }
220
+
221
+ .mat-mdc-standard-chip .mdc-evolution-chip__icon--trailing {
222
+ width: calc-rem(14px);
223
+ height: calc-rem(14px);
224
+ }
225
+
226
+ .mdc-evolution-chip-set .mdc-evolution-chip {
227
+ margin-top: 0;
228
+ }
229
+ }
@@ -154,3 +154,25 @@
154
154
  }
155
155
  }
156
156
  }
157
+
158
+ .ecabs-date-range-picker-v2 {
159
+ .mat-calendar-content {
160
+ padding: 0 1.6rem 1.6rem;
161
+ }
162
+ }
163
+
164
+ ecabs-date-range-picker-v2 {
165
+ .mat-datepicker-input {
166
+ text-align: center;
167
+ }
168
+
169
+ input {
170
+ border: none;
171
+ box-shadow: none;
172
+ }
173
+
174
+ input:focus {
175
+ outline: none;
176
+ box-shadow: none;
177
+ }
178
+ }
@@ -5,7 +5,7 @@
5
5
  width: 100%;
6
6
  background-color: var(--color-white);
7
7
  box-shadow: $box-shadow-default;
8
- border-radius: $border-radius-base;
8
+ border-radius: calc-rem($border-radius-large);
9
9
  z-index: 1000;
10
10
  }
11
11
 
@@ -4,12 +4,18 @@
4
4
  border-radius: $border-radius-base;
5
5
  display: flex;
6
6
  width: fit-content;
7
- padding: calc-rem(6px 8px);
7
+ min-width: calc-rem(56px);
8
+ padding: calc-rem(8px 12px);
8
9
  align-items: center;
9
10
  justify-content: center;
10
11
  background-color: var(--color-gray-50);
11
12
  color: var(--color-gray-500);
12
13
  font-weight: $font-weight-regular;
14
+ cursor: pointer;
15
+
16
+ &:hover {
17
+ border-color: var(--color-gray-300);
18
+ }
13
19
 
14
20
  @include e(standard) {
15
21
  width: 7.2rem;
@@ -40,8 +40,8 @@ form {
40
40
  display: block;
41
41
  width: 100%;
42
42
  padding: calc-rem(8) calc-rem(16);
43
- border-radius: $border-radius-base;
44
- border: 1px solid var(--color-gray-500);
43
+ border-radius: $border-radius-medium;
44
+ border: 1px solid var(--color-gray-200);
45
45
  color: var(--color-black);
46
46
  line-height: $base-line-height;
47
47
 
@@ -104,8 +104,8 @@ form {
104
104
  display: block;
105
105
  width: 100%;
106
106
  padding: calc-rem(16);
107
- border-radius: $border-radius-base;
108
- border: 1px solid var(--color-gray-500);
107
+ border-radius: $border-radius-medium;
108
+ border: 1px solid var(--color-gray-200);
109
109
  color: var(--color-black);
110
110
  line-height: $base-line-height;
111
111
 
@@ -152,14 +152,87 @@ form {
152
152
  }
153
153
  }
154
154
 
155
+ // #Range
156
+ @include e(range) {
157
+ @include fontSize($font-size-base);
158
+ display: block;
159
+ width: 100%;
160
+ padding: calc-rem(8) calc-rem(16);
161
+ color: var(--color-black);
162
+ line-height: $base-line-height;
163
+ border: none;
164
+
165
+ &:focus-visible {
166
+ outline: none;
167
+ }
168
+
169
+ @include m(wrapper) {
170
+ // wrapper
171
+ display: grid;
172
+ grid-template-columns: 1fr auto 1fr;
173
+ border-radius: calc-rem($border-radius-large);
174
+ border: 1px solid var(--color-gray-300);
175
+ align-items: center;
176
+ line-height: 1;
177
+ background-color: var(--color-white);
178
+
179
+ &:focus-within {
180
+ border-color: var(--color-brand-dark);
181
+ }
182
+ }
183
+
184
+ @include m(suffix) {
185
+ // suffix
186
+ position: absolute !important;
187
+ top: 50%;
188
+ right: calc-rem(16);
189
+ color: var(--color-gray-500);
190
+ transform: translateY(-50%);
191
+
192
+ &,
193
+ i,
194
+ .mat-icon {
195
+ @include fontSize($form-input-icon-size);
196
+ width: calc-rem($form-input-icon-size);
197
+ height: calc-rem($form-input-icon-size);
198
+ }
199
+ }
200
+
201
+ @include m(prefix) {
202
+ // prefix
203
+ @extend .form-field__range--suffix;
204
+
205
+ right: unset;
206
+ left: calc-rem(16);
207
+ }
208
+
209
+ @include m(disabled) {
210
+ // disabled
211
+ background-color: var(--color-gray-100);
212
+ border-color: transparent;
213
+ }
214
+
215
+ @include m(invalid) {
216
+ // invalid
217
+ border-color: var(--color-error) !important;
218
+ color: var(--color-error) !important;
219
+ }
220
+ }
221
+
155
222
  // #Invalid
156
223
  @include m(invalid) {
157
224
  &,
158
225
  .form-field__input,
159
- .form-field__textarea {
226
+ .form-field__textarea,
227
+ .form-field__range {
160
228
  color: var(--color-error);
161
229
  border-color: var(--color-error);
162
230
  }
231
+
232
+ &,
233
+ .form-field__range--wrapper {
234
+ border-color: var(--color-error);
235
+ }
163
236
  }
164
237
 
165
238
  // #Required
@@ -56,9 +56,7 @@
56
56
  --color-allocation-unavailable: #F2F2F2;
57
57
  --cropper-outline-color: rgba(0, 0, 0, 0.5);
58
58
 
59
- /* #Slate */
60
- --color-slate-100: #f1f5f9;
61
- --color-slate-200: #e2e8f0;
62
- --color-slate-500: #64748b;
63
- --color-slate-900: #0f172a;
59
+ --mat-option-label-text-color: var(--color-gray-900);
60
+ --mat-option-focus-state-layer-color: var(--color-gray-100);
61
+ --mat-option-hover-state-layer-color: var(--color-gray-50);
64
62
  }
@@ -24,3 +24,7 @@ $font-heading-lg: 36px;
24
24
 
25
25
  // Height
26
26
  $base-line-height: 1.5;
27
+
28
+ :root {
29
+ --mat-option-label-text-size: #{$font-size-sm};
30
+ }
@@ -4,6 +4,8 @@ $box-shadow-large: 0 0 25px rgba(0, 0, 0, 0.2);
4
4
 
5
5
  /* #Border settings */
6
6
  $border-radius-base: .25rem;
7
+ $border-radius-medium: 6px;
8
+ $border-radius-large: 8px;
7
9
 
8
10
  /* #Transition */
9
11
  $trans-duration-style: .24s ease-out;