@ngstarter-ui/components 21.0.18 → 21.0.20

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 (77) hide show
  1. package/ai/component-registry.json +27 -12
  2. package/fesm2022/ngstarter-ui-components-chips.mjs +72 -38
  3. package/fesm2022/ngstarter-ui-components-chips.mjs.map +1 -1
  4. package/fesm2022/ngstarter-ui-components-code-highlighter.mjs +5 -3
  5. package/fesm2022/ngstarter-ui-components-code-highlighter.mjs.map +1 -1
  6. package/fesm2022/ngstarter-ui-components-color-picker.mjs +1 -1
  7. package/fesm2022/ngstarter-ui-components-color-picker.mjs.map +1 -1
  8. package/fesm2022/ngstarter-ui-components-comment-editor.mjs +2 -2
  9. package/fesm2022/ngstarter-ui-components-comment-editor.mjs.map +1 -1
  10. package/fesm2022/{ngstarter-ui-components-content-editor-code-block.component-CpZ5gJOc.mjs → ngstarter-ui-components-content-editor-code-block.component-Czb0bvcr.mjs} +2 -2
  11. package/fesm2022/{ngstarter-ui-components-content-editor-code-block.component-CpZ5gJOc.mjs.map → ngstarter-ui-components-content-editor-code-block.component-Czb0bvcr.mjs.map} +1 -1
  12. package/fesm2022/{ngstarter-ui-components-content-editor-embed-block-ghm0_0AF.mjs → ngstarter-ui-components-content-editor-embed-block-c8Pq0Jdq.mjs} +3 -3
  13. package/fesm2022/{ngstarter-ui-components-content-editor-embed-block-ghm0_0AF.mjs.map → ngstarter-ui-components-content-editor-embed-block-c8Pq0Jdq.mjs.map} +1 -1
  14. package/fesm2022/{ngstarter-ui-components-content-editor-heading-block.component-C1FH89Sj.mjs → ngstarter-ui-components-content-editor-heading-block.component-CT5g3MLZ.mjs} +2 -2
  15. package/fesm2022/{ngstarter-ui-components-content-editor-heading-block.component-C1FH89Sj.mjs.map → ngstarter-ui-components-content-editor-heading-block.component-CT5g3MLZ.mjs.map} +1 -1
  16. package/fesm2022/{ngstarter-ui-components-content-editor-image-block.component-ahCIfpvQ.mjs → ngstarter-ui-components-content-editor-image-block.component-Cp_Yo7zI.mjs} +3 -3
  17. package/fesm2022/{ngstarter-ui-components-content-editor-image-block.component-ahCIfpvQ.mjs.map → ngstarter-ui-components-content-editor-image-block.component-Cp_Yo7zI.mjs.map} +1 -1
  18. package/fesm2022/{ngstarter-ui-components-content-editor-list-block.component-guhW_EyK.mjs → ngstarter-ui-components-content-editor-list-block.component-BvineUWy.mjs} +2 -2
  19. package/fesm2022/{ngstarter-ui-components-content-editor-list-block.component-guhW_EyK.mjs.map → ngstarter-ui-components-content-editor-list-block.component-BvineUWy.mjs.map} +1 -1
  20. package/fesm2022/{ngstarter-ui-components-content-editor-ngstarter-ui-components-content-editor-DNLTNGYa.mjs → ngstarter-ui-components-content-editor-ngstarter-ui-components-content-editor-4_TqxgpH.mjs} +13 -13
  21. package/fesm2022/{ngstarter-ui-components-content-editor-ngstarter-ui-components-content-editor-DNLTNGYa.mjs.map → ngstarter-ui-components-content-editor-ngstarter-ui-components-content-editor-4_TqxgpH.mjs.map} +1 -1
  22. package/fesm2022/{ngstarter-ui-components-content-editor-paragraph-block.component-DjgGUc7s.mjs → ngstarter-ui-components-content-editor-paragraph-block.component-sH44U1I8.mjs} +2 -2
  23. package/fesm2022/{ngstarter-ui-components-content-editor-paragraph-block.component-DjgGUc7s.mjs.map → ngstarter-ui-components-content-editor-paragraph-block.component-sH44U1I8.mjs.map} +1 -1
  24. package/fesm2022/{ngstarter-ui-components-content-editor-quote-block.component-B3pek1H6.mjs → ngstarter-ui-components-content-editor-quote-block.component-CA3KoZ-u.mjs} +2 -2
  25. package/fesm2022/{ngstarter-ui-components-content-editor-quote-block.component-B3pek1H6.mjs.map → ngstarter-ui-components-content-editor-quote-block.component-CA3KoZ-u.mjs.map} +1 -1
  26. package/fesm2022/{ngstarter-ui-components-content-editor-table-block.component-bgBNjf4d.mjs → ngstarter-ui-components-content-editor-table-block.component-GTZiYUjU.mjs} +2 -2
  27. package/fesm2022/{ngstarter-ui-components-content-editor-table-block.component-bgBNjf4d.mjs.map → ngstarter-ui-components-content-editor-table-block.component-GTZiYUjU.mjs.map} +1 -1
  28. package/fesm2022/{ngstarter-ui-components-content-editor-video-block.component-DPlYe-_8.mjs → ngstarter-ui-components-content-editor-video-block.component-CzMZ1s6C.mjs} +3 -3
  29. package/fesm2022/{ngstarter-ui-components-content-editor-video-block.component-DPlYe-_8.mjs.map → ngstarter-ui-components-content-editor-video-block.component-CzMZ1s6C.mjs.map} +1 -1
  30. package/fesm2022/ngstarter-ui-components-content-editor.mjs +1 -1
  31. package/fesm2022/ngstarter-ui-components-country-select.mjs +1 -1
  32. package/fesm2022/ngstarter-ui-components-country-select.mjs.map +1 -1
  33. package/fesm2022/ngstarter-ui-components-currency-select.mjs +1 -1
  34. package/fesm2022/ngstarter-ui-components-currency-select.mjs.map +1 -1
  35. package/fesm2022/ngstarter-ui-components-date-format-select.mjs +1 -1
  36. package/fesm2022/ngstarter-ui-components-date-format-select.mjs.map +1 -1
  37. package/fesm2022/ngstarter-ui-components-filter-builder.mjs +1 -1
  38. package/fesm2022/ngstarter-ui-components-filter-builder.mjs.map +1 -1
  39. package/fesm2022/ngstarter-ui-components-form-field.mjs +9 -9
  40. package/fesm2022/ngstarter-ui-components-form-field.mjs.map +1 -1
  41. package/fesm2022/{ngstarter-ui-components-form-renderer-autocomplete-many-field-BZBE7KSU.mjs → ngstarter-ui-components-form-renderer-autocomplete-many-field-BLhfO1zC.mjs} +3 -3
  42. package/fesm2022/ngstarter-ui-components-form-renderer-autocomplete-many-field-BLhfO1zC.mjs.map +1 -0
  43. package/fesm2022/{ngstarter-ui-components-form-renderer-datepicker-field-Bzc0TPO9.mjs → ngstarter-ui-components-form-renderer-datepicker-field-DRSVe0gK.mjs} +2 -2
  44. package/fesm2022/{ngstarter-ui-components-form-renderer-datepicker-field-Bzc0TPO9.mjs.map → ngstarter-ui-components-form-renderer-datepicker-field-DRSVe0gK.mjs.map} +1 -1
  45. package/fesm2022/{ngstarter-ui-components-form-renderer-input-field-UaMfHCtj.mjs → ngstarter-ui-components-form-renderer-input-field-DpGLKZjz.mjs} +2 -2
  46. package/fesm2022/{ngstarter-ui-components-form-renderer-input-field-UaMfHCtj.mjs.map → ngstarter-ui-components-form-renderer-input-field-DpGLKZjz.mjs.map} +1 -1
  47. package/fesm2022/{ngstarter-ui-components-form-renderer-select-field-Dvg--xrB.mjs → ngstarter-ui-components-form-renderer-select-field-CCbpYyZo.mjs} +2 -2
  48. package/fesm2022/{ngstarter-ui-components-form-renderer-select-field-Dvg--xrB.mjs.map → ngstarter-ui-components-form-renderer-select-field-CCbpYyZo.mjs.map} +1 -1
  49. package/fesm2022/{ngstarter-ui-components-form-renderer-textarea-field-4zH7FTQ1.mjs → ngstarter-ui-components-form-renderer-textarea-field-D89GlMDO.mjs} +2 -2
  50. package/fesm2022/{ngstarter-ui-components-form-renderer-textarea-field-4zH7FTQ1.mjs.map → ngstarter-ui-components-form-renderer-textarea-field-D89GlMDO.mjs.map} +1 -1
  51. package/fesm2022/{ngstarter-ui-components-form-renderer-timezone-field-BpH65Hd-.mjs → ngstarter-ui-components-form-renderer-timezone-field-C9wz7zPg.mjs} +2 -2
  52. package/fesm2022/{ngstarter-ui-components-form-renderer-timezone-field-BpH65Hd-.mjs.map → ngstarter-ui-components-form-renderer-timezone-field-C9wz7zPg.mjs.map} +1 -1
  53. package/fesm2022/ngstarter-ui-components-form-renderer.mjs +6 -6
  54. package/fesm2022/ngstarter-ui-components-image-designer.mjs +3 -3
  55. package/fesm2022/ngstarter-ui-components-image-designer.mjs.map +1 -1
  56. package/fesm2022/ngstarter-ui-components-list.mjs +7 -7
  57. package/fesm2022/ngstarter-ui-components-list.mjs.map +1 -1
  58. package/fesm2022/ngstarter-ui-components-paginator.mjs +1 -1
  59. package/fesm2022/ngstarter-ui-components-paginator.mjs.map +1 -1
  60. package/fesm2022/ngstarter-ui-components-panel.mjs +8 -4
  61. package/fesm2022/ngstarter-ui-components-panel.mjs.map +1 -1
  62. package/fesm2022/ngstarter-ui-components-pin-input.mjs +1 -1
  63. package/fesm2022/ngstarter-ui-components-pin-input.mjs.map +1 -1
  64. package/fesm2022/ngstarter-ui-components-select.mjs +19 -4
  65. package/fesm2022/ngstarter-ui-components-select.mjs.map +1 -1
  66. package/fesm2022/ngstarter-ui-components-text-editor.mjs +2 -2
  67. package/fesm2022/ngstarter-ui-components-text-editor.mjs.map +1 -1
  68. package/fesm2022/ngstarter-ui-components-timezone-select.mjs +1 -1
  69. package/fesm2022/ngstarter-ui-components-timezone-select.mjs.map +1 -1
  70. package/package.json +1 -1
  71. package/types/ngstarter-ui-components-chips.d.ts +15 -6
  72. package/types/ngstarter-ui-components-code-highlighter.d.ts +2 -1
  73. package/types/ngstarter-ui-components-form-field.d.ts +3 -2
  74. package/types/ngstarter-ui-components-list.d.ts +1 -1
  75. package/types/ngstarter-ui-components-panel.d.ts +3 -1
  76. package/types/ngstarter-ui-components-select.d.ts +5 -1
  77. package/fesm2022/ngstarter-ui-components-form-renderer-autocomplete-many-field-BZBE7KSU.mjs.map +0 -1
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@ngstarter-ui/components",
3
3
  "description": "NgStarter - AI-friendly Enterprise Angular UI Components and Admin Panel",
4
- "version": "21.0.18",
4
+ "version": "21.0.20",
5
5
  "repository": {
6
6
  "type": "git",
7
7
  "url": "https://github.com/elementarlabsdev/ngstarter.git"
@@ -1,5 +1,5 @@
1
1
  import * as _angular_core from '@angular/core';
2
- import { ElementRef, AfterContentInit, DoCheck } from '@angular/core';
2
+ import { ElementRef, AfterContentInit, OnDestroy, DoCheck } from '@angular/core';
3
3
  import { ControlValueAccessor, NgControl } from '@angular/forms';
4
4
  import { FormFieldControl } from '@ngstarter-ui/components/form-field';
5
5
 
@@ -20,7 +20,7 @@ declare class Chip {
20
20
  _handleKeydown(event: KeyboardEvent): void;
21
21
  _handleBlur(): void;
22
22
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<Chip, never>;
23
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<Chip, "ngs-chip", never, { "appearance": { "alias": "appearance"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; }, { "destroyed": "destroyed"; "removed": "removed"; }, never, ["ngs-chip-avatar, [ngsChipAvatar]", "ngs-chip-shape, [ngsChipShape]", "*", "ngs-chip-remove, [ngsChipRemove], [ngsChipControl], [ngsChipEdit]"], true, never>;
23
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<Chip, "ngs-chip", ["ngsChip"], { "appearance": { "alias": "appearance"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; }, { "destroyed": "destroyed"; "removed": "removed"; }, never, ["ngs-chip-avatar, [ngsChipAvatar]", "ngs-chip-shape, [ngsChipShape]", "*", "ngs-chip-remove, [ngsChipRemove], [ngsChipControl], [ngsChipEdit]"], true, never>;
24
24
  }
25
25
 
26
26
  interface ChipEditedEvent {
@@ -67,6 +67,7 @@ declare class ChipGrid implements ControlValueAccessor, AfterContentInit, FormFi
67
67
  readonly stateChanges: _angular_core.WritableSignal<void>;
68
68
  private _focused;
69
69
  get focused(): boolean;
70
+ get multiline(): boolean;
70
71
  private _errorState;
71
72
  get errorState(): boolean;
72
73
  private _chipsLength;
@@ -99,7 +100,7 @@ declare class ChipGrid implements ControlValueAccessor, AfterContentInit, FormFi
99
100
 
100
101
  declare class ChipOption extends Chip {
101
102
  selected: _angular_core.InputSignalWithTransform<boolean, unknown>;
102
- private _internalSelected;
103
+ private readonly _internalSelected;
103
104
  constructor();
104
105
  get isSelected(): boolean;
105
106
  _setSelected(value: boolean): void;
@@ -109,14 +110,18 @@ declare class ChipOption extends Chip {
109
110
  }>;
110
111
  toggleSelected(): void;
111
112
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<ChipOption, never>;
112
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<ChipOption, "ngs-chip-option", never, { "selected": { "alias": "selected"; "required": false; "isSignal": true; }; }, { "selectionChange": "selectionChange"; }, never, ["ngs-chip-avatar, [ngsChipAvatar]", "ngs-chip-shape, [ngsChipShape]", "*", "ngs-chip-remove, [ngsChipRemove], [ngsChipControl], [ngsChipEdit]"], true, never>;
113
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<ChipOption, "ngs-chip-option", ["ngsChipOption"], { "selected": { "alias": "selected"; "required": false; "isSignal": true; }; }, { "selectionChange": "selectionChange"; }, never, ["ngs-chip-avatar, [ngsChipAvatar]", "ngs-chip-shape, [ngsChipShape]", "*", "ngs-chip-remove, [ngsChipRemove], [ngsChipControl], [ngsChipEdit]"], true, never>;
113
114
  }
114
115
 
115
- declare class ChipListbox implements ControlValueAccessor, AfterContentInit {
116
+ declare class ChipListbox implements ControlValueAccessor, AfterContentInit, OnDestroy {
116
117
  multiple: _angular_core.InputSignalWithTransform<boolean, unknown>;
117
118
  disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
119
+ private readonly _disabledByControl;
120
+ readonly isDisabled: _angular_core.Signal<boolean>;
118
121
  readonly _chips: _angular_core.Signal<readonly ChipOption[]>;
119
122
  private readonly _chips$;
123
+ private _chipSelectionSubscriptions;
124
+ private _syncTimeout;
120
125
  private _value;
121
126
  onChange: (value: any) => void;
122
127
  onTouched: () => void;
@@ -127,7 +132,11 @@ declare class ChipListbox implements ControlValueAccessor, AfterContentInit {
127
132
  registerOnTouched(fn: any): void;
128
133
  setDisabledState(isDisabled: boolean): void;
129
134
  ngAfterContentInit(): void;
135
+ ngOnDestroy(): void;
130
136
  private _onSelectionChange;
137
+ private _watchChips;
138
+ private _clearChipSelectionSubscriptions;
139
+ private _syncChipsAsync;
131
140
  private _updateChips;
132
141
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<ChipListbox, never>;
133
142
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<ChipListbox, "ngs-chip-listbox", never, { "multiple": { "alias": "multiple"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; }, {}, ["_chips"], ["*"], true, never>;
@@ -170,7 +179,7 @@ declare class ChipInput implements DoCheck {
170
179
  chipGridInput: _angular_core.InputSignal<ChipGrid | undefined>;
171
180
  chipInputSeparatorKeyCodes: _angular_core.InputSignal<ReadonlySet<number> | readonly number[] | undefined>;
172
181
  chipInputAddOnBlur: _angular_core.InputSignalWithTransform<boolean, unknown>;
173
- readonly chipInputTokenEnd: _angular_core.OutputEmitterRef<any>;
182
+ readonly chipInputTokenEnd: _angular_core.OutputEmitterRef<ChipInputEvent>;
174
183
  protected readonly _value: _angular_core.WritableSignal<string>;
175
184
  protected readonly _focused: _angular_core.WritableSignal<boolean>;
176
185
  constructor();
@@ -13,6 +13,7 @@ declare class CodeHighlighter implements OnChanges {
13
13
  highlightLines: _angular_core.InputSignal<number[] | number[][]>;
14
14
  showLanguage: _angular_core.InputSignalWithTransform<boolean, unknown>;
15
15
  showCopyButton: _angular_core.InputSignalWithTransform<boolean, unknown>;
16
+ disableOverflow: _angular_core.InputSignalWithTransform<boolean, unknown>;
16
17
  readonly content: _angular_core.WritableSignal<SafeHtml | null>;
17
18
  readonly isLoading: _angular_core.WritableSignal<boolean>;
18
19
  readonly displayedLanguage: _angular_core.Signal<string>;
@@ -22,7 +23,7 @@ declare class CodeHighlighter implements OnChanges {
22
23
  private copyTimeout?;
23
24
  copyCode(): void;
24
25
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<CodeHighlighter, never>;
25
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<CodeHighlighter, "ngs-code-highlighter", ["ngsCodeHighlighter"], { "code": { "alias": "code"; "required": true; "isSignal": true; }; "language": { "alias": "language"; "required": false; "isSignal": true; }; "theme": { "alias": "theme"; "required": false; "isSignal": true; }; "title": { "alias": "title"; "required": false; "isSignal": true; }; "appearance": { "alias": "appearance"; "required": false; "isSignal": true; }; "diff": { "alias": "diff"; "required": false; "isSignal": true; }; "highlightLines": { "alias": "highlightLines"; "required": false; "isSignal": true; }; "showLanguage": { "alias": "showLanguage"; "required": false; "isSignal": true; }; "showCopyButton": { "alias": "showCopyButton"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
26
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<CodeHighlighter, "ngs-code-highlighter", ["ngsCodeHighlighter"], { "code": { "alias": "code"; "required": true; "isSignal": true; }; "language": { "alias": "language"; "required": false; "isSignal": true; }; "theme": { "alias": "theme"; "required": false; "isSignal": true; }; "title": { "alias": "title"; "required": false; "isSignal": true; }; "appearance": { "alias": "appearance"; "required": false; "isSignal": true; }; "diff": { "alias": "diff"; "required": false; "isSignal": true; }; "highlightLines": { "alias": "highlightLines"; "required": false; "isSignal": true; }; "showLanguage": { "alias": "showLanguage"; "required": false; "isSignal": true; }; "showCopyButton": { "alias": "showCopyButton"; "required": false; "isSignal": true; }; "disableOverflow": { "alias": "disableOverflow"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
26
27
  }
27
28
 
28
29
  export { CodeHighlighter };
@@ -71,8 +71,9 @@ declare class IconButtonSuffix {
71
71
  declare const FORM_FIELD: InjectionToken<any>;
72
72
 
73
73
  declare class FormField {
74
+ readonly elementRef: ElementRef<any>;
74
75
  subscriptHiddenIfEmpty: i0.InputSignalWithTransform<boolean, unknown>;
75
- elementRef: ElementRef<any>;
76
+ sameHeightAsButton: i0.InputSignalWithTransform<boolean, unknown>;
76
77
  wrapper: i0.Signal<ElementRef<any>>;
77
78
  container: i0.Signal<ElementRef<any>>;
78
79
  control: i0.Signal<FormFieldControl<any> | undefined>;
@@ -92,7 +93,7 @@ declare class FormField {
92
93
  protected _onClick(event: MouseEvent): void;
93
94
  focus(): void;
94
95
  static ɵfac: i0.ɵɵFactoryDeclaration<FormField, never>;
95
- static ɵcmp: i0.ɵɵComponentDeclaration<FormField, "ngs-form-field", ["ngsFormField"], { "subscriptHiddenIfEmpty": { "alias": "subscriptHiddenIfEmpty"; "required": false; "isSignal": true; }; }, {}, ["control", "labelChild", "prefixChildren", "iconPrefixChildren", "iconButtonPrefixChildren", "textPrefixChildren", "suffixChildren", "iconSuffixChildren", "iconButtonSuffixChildren", "textSuffixChildren", "hintChildren", "errorChildren"], ["[ngsPrefix]", "[ngsIconPrefix]", "[ngsIconButtonPrefix]", "[ngsTextPrefix]", "ngs-label", "*", "[ngsTextSuffix]", "[ngsIconButtonSuffix]", "[ngsIconSuffix]", "[ngsSuffix]", "ngs-error", "ngs-hint"], true, never>;
96
+ static ɵcmp: i0.ɵɵComponentDeclaration<FormField, "ngs-form-field", ["ngsFormField"], { "subscriptHiddenIfEmpty": { "alias": "subscriptHiddenIfEmpty"; "required": false; "isSignal": true; }; "sameHeightAsButton": { "alias": "sameHeightAsButton"; "required": false; "isSignal": true; }; }, {}, ["control", "labelChild", "prefixChildren", "iconPrefixChildren", "iconButtonPrefixChildren", "textPrefixChildren", "suffixChildren", "iconSuffixChildren", "iconButtonSuffixChildren", "textSuffixChildren", "hintChildren", "errorChildren"], ["[ngsPrefix]", "[ngsIconPrefix]", "[ngsIconButtonPrefix]", "[ngsTextPrefix]", "ngs-label", "*", "[ngsTextSuffix]", "[ngsIconButtonSuffix]", "[ngsIconSuffix]", "[ngsSuffix]", "ngs-error", "ngs-hint"], true, never>;
96
97
  }
97
98
 
98
99
  interface FormFieldDefaultOptions {
@@ -65,9 +65,9 @@ declare class ListItem {
65
65
  }
66
66
 
67
67
  declare class SelectionList extends List implements OnInit {
68
+ readonly options: i0.Signal<readonly any[]>;
68
69
  multiple: i0.InputSignalWithTransform<boolean, unknown>;
69
70
  readonly selectionChange: i0.OutputEmitterRef<any>;
70
- readonly options: i0.Signal<readonly any[]>;
71
71
  selectedOptions: SelectionModel<ListOption>;
72
72
  constructor();
73
73
  ngOnInit(): void;
@@ -21,8 +21,10 @@ declare class PanelHeader {
21
21
  }
22
22
 
23
23
  declare class PanelSubheader {
24
+ flex: i0.InputSignalWithTransform<boolean, unknown>;
25
+ autoHeight: i0.InputSignalWithTransform<boolean, unknown>;
24
26
  static ɵfac: i0.ɵɵFactoryDeclaration<PanelSubheader, never>;
25
- static ɵcmp: i0.ɵɵComponentDeclaration<PanelSubheader, "ngs-panel-subheader", ["ngsPanelSubheader"], {}, {}, never, never, true, never>;
27
+ static ɵcmp: i0.ɵɵComponentDeclaration<PanelSubheader, "ngs-panel-subheader", ["ngsPanelSubheader"], { "flex": { "alias": "flex"; "required": false; "isSignal": true; }; "autoHeight": { "alias": "autoHeight"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
26
28
  }
27
29
 
28
30
  declare class PanelFooter {
@@ -81,6 +81,7 @@ declare class Select implements ControlValueAccessor, OnDestroy, AfterContentIni
81
81
  get required(): boolean;
82
82
  multiple: _angular_core.InputSignalWithTransform<boolean, unknown>;
83
83
  hideCheckIcon: _angular_core.InputSignalWithTransform<boolean, unknown>;
84
+ clearable: _angular_core.InputSignalWithTransform<boolean, unknown>;
84
85
  ariaLabel: _angular_core.InputSignal<string | null>;
85
86
  tabIndex: _angular_core.InputSignalWithTransform<number, any>;
86
87
  ariaDescribedby: _angular_core.InputSignal<string | null>;
@@ -110,6 +111,8 @@ declare class Select implements ControlValueAccessor, OnDestroy, AfterContentIni
110
111
  get errorState(): boolean;
111
112
  private _empty;
112
113
  get empty(): boolean;
114
+ readonly hasValue: _angular_core.Signal<boolean>;
115
+ protected readonly showClearButton: _angular_core.Signal<boolean>;
113
116
  private _shouldLabelFloat;
114
117
  get shouldLabelFloat(): boolean;
115
118
  _onChange: (value: any) => void;
@@ -127,6 +130,7 @@ declare class Select implements ControlValueAccessor, OnDestroy, AfterContentIni
127
130
  toggle(): void;
128
131
  open(): void;
129
132
  close(): void;
133
+ clear(event?: MouseEvent): void;
130
134
  _onPositionChange(event: any): void;
131
135
  _onFocus(): void;
132
136
  _onBlur(): void;
@@ -145,7 +149,7 @@ declare class Select implements ControlValueAccessor, OnDestroy, AfterContentIni
145
149
  private _getOptionData;
146
150
  private _selectValue;
147
151
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<Select, never>;
148
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<Select, "ngs-select", ["ngsSelect"], { "_id": { "alias": "id"; "required": false; "isSignal": true; }; "_placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "_disabledInput": { "alias": "disabled"; "required": false; "isSignal": true; }; "_required": { "alias": "required"; "required": false; "isSignal": true; }; "multiple": { "alias": "multiple"; "required": false; "isSignal": true; }; "hideCheckIcon": { "alias": "hideCheckIcon"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "aria-label"; "required": false; "isSignal": true; }; "tabIndex": { "alias": "tabIndex"; "required": false; "isSignal": true; }; "ariaDescribedby": { "alias": "aria-describedby"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; }, { "selectionChange": "selectionChange"; "opened": "opened"; "closed": "closed"; "value": "valueChange"; }, ["selectBody", "options", "optionGroups", "customTrigger", "filterTrigger"], ["ngs-select-trigger", "ngs-filter-trigger", "ngs-select-header", "ngs-select-body", "ngs-optgroup,ngs-option", "*", "ngs-select-footer"], true, never>;
152
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<Select, "ngs-select", ["ngsSelect"], { "_id": { "alias": "id"; "required": false; "isSignal": true; }; "_placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "_disabledInput": { "alias": "disabled"; "required": false; "isSignal": true; }; "_required": { "alias": "required"; "required": false; "isSignal": true; }; "multiple": { "alias": "multiple"; "required": false; "isSignal": true; }; "hideCheckIcon": { "alias": "hideCheckIcon"; "required": false; "isSignal": true; }; "clearable": { "alias": "clearable"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "aria-label"; "required": false; "isSignal": true; }; "tabIndex": { "alias": "tabIndex"; "required": false; "isSignal": true; }; "ariaDescribedby": { "alias": "aria-describedby"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; }, { "selectionChange": "selectionChange"; "opened": "opened"; "closed": "closed"; "value": "valueChange"; }, ["selectBody", "options", "optionGroups", "customTrigger", "filterTrigger"], ["ngs-select-trigger", "ngs-filter-trigger", "ngs-select-header", "ngs-select-body", "ngs-optgroup,ngs-option", "*", "ngs-select-footer"], true, never>;
149
153
  }
150
154
 
151
155
  declare class SelectHeader {
@@ -1 +0,0 @@
1
- {"version":3,"file":"ngstarter-ui-components-form-renderer-autocomplete-many-field-BZBE7KSU.mjs","sources":["../../../projects/components/form-renderer/src/fields/autocomplete-many-field/autocomplete-many-field.ts","../../../projects/components/form-renderer/src/fields/autocomplete-many-field/autocomplete-many-field.html"],"sourcesContent":["import { Component, ElementRef, inject, input, OnInit, viewChild } from '@angular/core';\nimport { FormControl, FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport {\n Autocomplete,\n AutocompleteSelectedEvent,\n AutocompleteTrigger\n} from '@ngstarter-ui/components/autocomplete';\nimport { Option } from '@ngstarter-ui/components/option';\nimport { ChipGrid, ChipInput, ChipInputEvent, ChipRemove, ChipRow } from '@ngstarter-ui/components/chips';\nimport { ComponentConfig } from '../../models/form-config.model';\nimport { COMMA, ENTER } from '@angular/cdk/keycodes';\nimport { Error, FormField, Hint, Label } from '@ngstarter-ui/components/form-field';\nimport { Icon } from '@ngstarter-ui/components/icon';\nimport { catchError, debounceTime, distinctUntilChanged, Observable, of, startWith, switchMap, tap } from 'rxjs';\nimport { ProgressSpinner } from '@ngstarter-ui/components/spinner';\nimport { AsyncPipe } from '@angular/common';\nimport { HttpClient, HttpParams } from '@angular/common/http';\n\n@Component({\n selector: 'ngs-autocomplete-many-field',\n imports: [\n FormsModule,\n Autocomplete,\n AutocompleteTrigger,\n ChipGrid,\n ChipInput,\n ChipRemove,\n ChipRow,\n Error,\n FormField,\n Hint,\n Icon,\n Label,\n Option,\n ReactiveFormsModule,\n ProgressSpinner,\n AsyncPipe\n ],\n templateUrl: './autocomplete-many-field.html',\n styleUrl: './autocomplete-many-field.scss'\n})\nexport class AutocompleteManyField implements OnInit {\n private httpClient = inject(HttpClient);\n\n control = input.required<FormControl>();\n config = input.required<ComponentConfig>();\n\n readonly separatorKeysCodes: number[] = [ENTER, COMMA];\n readonly chipsCtrl = new FormControl('');\n readonly input = viewChild.required<ElementRef<HTMLInputElement>>('input');\n readonly value: any[] = [];\n\n filteredOptions$!: Observable<any[]>;\n isLoading = false;\n\n ngOnInit() {\n this.filteredOptions$ = this.chipsCtrl.valueChanges.pipe(\n startWith(''),\n tap(() => this.isLoading = true),\n debounceTime(300),\n distinctUntilChanged(),\n switchMap((query: any) => {\n if (!query || !query.trim()) {\n return of([]);\n }\n const params = new HttpParams().set('query', query || '');\n return this.httpClient.get<any[]>(this.config().payload?.['autocompleteUrl'], {\n params\n });\n }),\n tap(() => this.isLoading = false)\n );\n }\n\n getErrorMessage(): string {\n const errors = this.control().errors;\n\n if (!errors) {\n return '';\n }\n\n const errorKey = Object.keys(errors)[0];\n const validator = this.config().validators?.find((v: any) => v.type === errorKey);\n return validator?.message || 'Invalid value';\n }\n\n get options() {\n return this.config()?.payload?.['options'] || [];\n }\n\n get bindValue() {\n return this.config().bindValue || 'id';\n }\n\n get bindName() {\n return this.config().bindName || 'name';\n }\n\n add(event: ChipInputEvent): void {\n const name = (event.value || '').trim();\n const hasValue = this.value.find(\n v => v[this.bindName].toLowerCase() === name.toLowerCase()\n );\n\n if (name && !hasValue) {\n this.value.push({\n [this.bindValue]: null,\n [this.bindName]: name,\n });\n }\n\n event.chipInput!.clear();\n this.chipsCtrl.setValue(null);\n this.isLoading = false;\n this.calculateControlValue();\n }\n\n remove(chip: any): void {\n const index = this.value.indexOf(chip);\n\n if (index >= 0) {\n this.value.splice(index, 1);\n this.calculateControlValue();\n }\n }\n\n onSelected(event: AutocompleteSelectedEvent): void {\n const hasValue = this.value.find(\n v => v[this.bindName].toLowerCase() === (event.option.value as any)[this.bindName].toLowerCase()\n );\n\n if (!hasValue) {\n this.value.push(event.option.value);\n }\n\n this.input().nativeElement.value = '';\n this.chipsCtrl.setValue(null);\n this.calculateControlValue();\n this.isLoading = false;\n }\n\n private calculateControlValue() {\n const value = this.value.map(v => {\n const itemValue = v[this.bindValue];\n\n if (itemValue) {\n return {\n [this.bindValue]: itemValue,\n };\n }\n\n return v;\n });\n this.control().setValue(value);\n }\n}\n","@if (control() && config()) {\n <ngs-form-field>\n <ngs-label>{{ config().label }}</ngs-label>\n <ngs-chip-grid #chipGrid>\n @for (option of value; track option) {\n <ngs-chip-row (removed)=\"remove(option)\">\n {{ option[bindName] }}\n <button ngsChipRemove>\n <ngs-icon name=\"fluent:dismiss-circle-24-regular\"/>\n </button>\n </ngs-chip-row>\n }\n </ngs-chip-grid>\n <input [placeholder]=\"config().placeholder\"\n #input\n maxlength=\"30\"\n [formControl]=\"chipsCtrl\"\n [ngsChipInputFor]=\"chipGrid\"\n [ngsAutocomplete]=\"autocomplete\"\n [ngsChipInputSeparatorKeyCodes]=\"separatorKeysCodes\"\n (chipInputTokenEnd)=\"add($event)\">\n @if (isLoading) {\n <div class=\"loader\">\n <ngs-progress-spinner\n mode=\"indeterminate\"\n [diameter]=\"20\"/>\n </div>\n }\n <ngs-autocomplete #autocomplete=\"ngsAutocomplete\" (optionSelected)=\"onSelected($event)\">\n @for (option of filteredOptions$ | async; track option) {\n <ngs-option [value]=\"option\">{{ option[bindName] }}</ngs-option>\n }\n\n @if (!(filteredOptions$ | async)?.length && !isLoading && chipsCtrl.value) {\n <ngs-option disabled>\n No search results found.\n </ngs-option>\n }\n </ngs-autocomplete>\n <ngs-hint>{{ config().hint }}</ngs-hint>\n @if (control().invalid && control().touched) {\n <ngs-error>{{ getErrorMessage() }}</ngs-error>\n }\n </ngs-form-field>\n}\n"],"names":[],"mappings":"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"}